想写个成生自定义格式字符串比如<a href="axxx.aspx?id=${id}$" title="${title}$">${title:cut20}$</a>
我想要处理成 <a href="axxx.aspx?id={0}" title="{1}">{2:cut20}</a>正则我写出来了\$\{(?<field>[^:}]+)(?<format>(?:\:[^}]*)?)?\}\$但是应该怎么去替换呢? public static string CreateHTML(string strFormat, DataTable dt)
{ string regExp = @"\$\{(?<field>[^:}]+)(?<format>(?:\:[^}]*)?)?\}\$";
MatchCollection matchs = Regex.Matches(strFormat, regExp);
string formatString =string.Empty;
object[] arges =new object[matchs.Count];
int i = 0;
foreach (Match m in matchs)
{
strFormat = Regex.Replace(strFormat, regExp, "{" + i + m.Groups["format"] + "}");
++i;
}
return strFormat;}这样我输进去<a href="axxx.aspx?id=${id}$" title="${title}$">${title:cut20}$</a>他给我换成了<a href="axxx.aspx?id={0}" title="{0}">{0}</a>...
用正则委托?但是正则委托怎么让{0}做一个自增呢???望高手指教再问一个嘿嘿比如我现在要拿到所有链接中class='xxxx'的无素的href属性(注:class的位置有可能在href左边也可能在右边一条正则能搞定吗?比如<a href="xxxx.aspx" class="xxxx">或者
<a class="xxxx" href="xxxx.aspx">这两种情况怎么用一条正则搞定?望指教!
我想要处理成 <a href="axxx.aspx?id={0}" title="{1}">{2:cut20}</a>正则我写出来了\$\{(?<field>[^:}]+)(?<format>(?:\:[^}]*)?)?\}\$但是应该怎么去替换呢? public static string CreateHTML(string strFormat, DataTable dt)
{ string regExp = @"\$\{(?<field>[^:}]+)(?<format>(?:\:[^}]*)?)?\}\$";
MatchCollection matchs = Regex.Matches(strFormat, regExp);
string formatString =string.Empty;
object[] arges =new object[matchs.Count];
int i = 0;
foreach (Match m in matchs)
{
strFormat = Regex.Replace(strFormat, regExp, "{" + i + m.Groups["format"] + "}");
++i;
}
return strFormat;}这样我输进去<a href="axxx.aspx?id=${id}$" title="${title}$">${title:cut20}$</a>他给我换成了<a href="axxx.aspx?id={0}" title="{0}">{0}</a>...
用正则委托?但是正则委托怎么让{0}做一个自增呢???望高手指教再问一个嘿嘿比如我现在要拿到所有链接中class='xxxx'的无素的href属性(注:class的位置有可能在href左边也可能在右边一条正则能搞定吗?比如<a href="xxxx.aspx" class="xxxx">或者
<a class="xxxx" href="xxxx.aspx">这两种情况怎么用一条正则搞定?望指教!
不知道第二个问题这样解决可以吗?这样的话就定义了两个同名的group了不知道遇上第二种问题时候的解题思路应该是怎么样的,望指教!
<a class="xxxx" href="xxxx.aspx">这两种情况怎么用一条正则搞定?
一条语句没有办法判断吧,除非中间用|分开两个,那实际也是两个了
1、a标签
2、是否包含class='xxxx'
所以这样写就可以了
<a[^>]*class="xxxx"[^>]*>
至于第一个问题,没太看明白,是每次都处理
<a href="axxx.aspx?id=${id}$" title="${title}$">${title:cut20}$</a>
这样一个字符串吗
那么替换后的0、1、2是根据什么来的,固定的,还是有一个依据,从左到右要替换的三个按顺序加1就可以了吗
string yourStr = ...............;
MatchCollection mc = Regex.Matches(yourStr, @"<a(?=[^>]*class=""xxxx""[^>]*>)[^>]*href=(['""])(?<url>[^'""\s>]*)\1[^>]*>", RegexOptions.IgnoreCase);
foreach (Match m in mc)
{
richTextBox2.Text += m.Groups["url"].Value + "\n";
}
多谢指教
{
return strFormat = Regex.Replace(strFormat, @"\$\{(?<field>[^:}]+)(?<format>(?:\:[^}]*)?)?\}\$", new MatchEvaluator(regReplace), RegexOptions.IgnoreCase);
}static int i = -1;
private static string regReplace(Match m)
{
i++;
return "{"+i + m.Groups["format"].Value + "}";
}不知道DataTable dt这个参数是用来做什么的,没见到你用,这里保留了,但是没用上调用
string yourStr = ..........;
richTextBox2.Text = CreateHTML(yourStr, null);
{
return Regex.Replace(strFormat, @"\$\{(?<field>[^:}]+)(?<format>(?:\:[^}]*)?)?\}\$", new MatchEvaluator(regReplace), RegexOptions.IgnoreCase);
}