2012-04-27 2 views
3

Как я могу использовать первую группу в Regex.Replace?
Я пробовал использовать $1, как documentation сказал. Кроме того, это не имеет значения, если я использую группировки с ?: или нет ...C# Regex.Replace первая группа

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 

Так что я здесь делаю неправильно?

ответ

1

Может быть, вы используете здесь не захватывающую группу?

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

это:

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

вместо

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

Вы можете использовать @ Кстати, чтобы избежать все специальные символы: @"(?:[\d\w]{6})"

Кроме того, вы пробовали

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

В противном случае я не думаю, что C# будет знать $ 1 от обычного значения строки

+0

hmm, похоже, мой пример без '?:' Был испорчен каким-то другим способом .. спасибо! –

0

Это не ответ на вопрос, который вы просите, но делать то, что вы пытаетесь в вашем примере, вы могли бы использовать HtmlDecode как описано here и избежать всей проблемы.

+0

Проблема в том, что я использую 'HTMLEncode' и только декодировать определенные теги, такие как b, i, u, br, hr и шрифт. –

Смежные вопросы