Regex.Replace无法正常工作

时间:2014-02-05 00:25:59

标签: c# regex

我在使用Regex.Replace

时遇到了一个奇怪的问题
string test = "if the other party is in material breach of such contract and, after <span style=\"background-color:#ffff00;\">forty-five (45)</span> calendar days notice of such breach";
string final = Regex.Replace(test, "forty-five (45)", "forty-five (46)", RegexOptions.IgnoreCase);

“最终”字符串仍显示“四十五(45)”。知道为什么吗?我假设它必须对标签做一些事情。我该如何解决这个问题?

由于

3 个答案:

答案 0 :(得分:4)

转义括号。根据语言的不同,可能需要两个反斜杠。

string final = Regex.Replace(test, "forty-five \(45\)", "forty-five (46)", RegexOptions.IgnoreCase);

基本上,括号被定义为含义,并且通过转义字符,您告诉正则表达式使用括​​号字符,而不是含义。

更好的是,你为什么要使用正则表达式呢?试着做一个正常的string replacement

string final = test.Replace("forty-five (45)", "forty-six (46)")

答案 1 :(得分:1)

圆括号在正则表达式中是特殊的。它们标记,以允许事物列表更改,例如foo(bar|bat)baz,它将匹配

  • foo,然后是
  • barbat,然后是
  • baz

因此,像foo(bar)这样的正则表达式永远不会与文字字符串foo(bar)匹配。它匹配的是文字字符串foobar。因此,您需要转义元字符。在C#中,这应该是你:

string final = Regex.Replace(test, @"forty-five \(45\)", "forty-five (46)", RegexOptions.IgnoreCase);

@ -quoted字符串有助于避免因过多的反斜杠而出现头痛。没有它,你必须写“四十五\(45 \)”。

答案 2 :(得分:0)

如果您无法转义括号,请将它们放在字符类中:

forty-five [(]45[)]