C#正则表达式负向前瞻从匹配中排除

时间:2010-11-18 23:27:06

标签: c# regex

在文本的某处我有一个与href的链接

  <a href="image-CoRRECTME.aspx?ALSO=ME&leaveme=<%= MyClass.Text %>">somelink</a>

除了&lt; %%&gt;的内容之外,我需要将href属性中的文本替换为小写。 brakets

应该是这样的:

 <a href="image-correctme.aspx?also=me&leaveme=<%= MyClass.Text %>">somelink</a>

我在想这样的事情...... "href=\"([^\"]*[A-Z]+[^\"]*)(?:(?<!.*<%[^%]*%>.*)))\""但是它不起作用。

谢谢!

2 个答案:

答案 0 :(得分:3)

如果你还没有想出来的话,试试这个。

private void test()
{
    string t = @"<a href=""image-CoRRECTME.aspx?ALSO=ME&leaveme=<%= MyClass.Text %>&test2=<%= MyClass2.Text %>&last_test=nothing"">somelink</a>";
    string fixed_string = Regex.Replace(t, "(?<=href=\"|href=\"[^\"]*%>)([^\"]*?)(?=<%|\")", TestMatchEvaluator);
}

private string TestMatchEvaluator(Match m)
{
    return m.Value.ToLower();
}

答案 1 :(得分:0)

这样的事情对你有用......

Regex test = new Regex(@"(?<=(href\=""))[^<]+", RegexOptions.Compiled);

string htmlCode = @"<a href=""image-CoRRECTME.aspx?ALSO=ME&leaveme=<%= MyClass.Text %>"">somelink</a>";

string result = test.Replace(htmlCode, test.Match(htmlCode).Value.ToLower());