C#Regex.Replace第一组

时间:2012-04-27 12:43:44

标签: c# regex

如何在Regex.Replace中使用第一组?
我尝试过像documentation那样使用$1。如果我使用?:或不使用

进行分组也没关系
string text = "<font color="#aa66bb">farbig</font>"     

/// this does not work
Regex.Replace(text, "&lt;font color=&quot;#(?:[\\d\\w]{6})&quot;&gt;", "<font color=\"#$1\">");
// => "<font color=\"#$1\">farbig&lt;/font&gt;"

// this works fine though  
Regex.Match(text, "&lt;font color=&quot;#([\\d\\w]{6})&quot;&gt;").Groups[1];
// => aa66bb

那我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

这可能仅仅是你在这里使用非捕获组吗?

Regex.Replace(this.Text, "&lt;font color=&quot;#(?:[\\d\\w]{6})&quot;&gt;", "<font color=\"#$1\">");

它是:

(?:[\\d\\w]{6})

而不是

([\\d\\w]{6})

您可以使用@ btw来逃避所有特殊字符:@"(?:[\d\w]{6})"

另外,你试过吗

"<font color=\"#" + $1 + "\">"

否则我认为c#不会从普通的字符串值中知道$ 1

答案 1 :(得分:0)

这不是您要问的问题的答案,但要在您的示例中执行您尝试的操作,您可以使用here所述的HtmlDecode并避免整个问题。