繁体   English   中英

Regex.Replace 不起作用

[英]Regex.Replace not working

我在 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)”。 知道为什么吗? 我假设它必须对标签做一些事情。 我该如何解决?

谢谢

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

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

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

更好的是,您为什么要使用正则表达式来执行此操作? 尝试做一个普通的字符串替换

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

括号在正则表达式中很特殊。 它们划定一个,以允许诸如交替之类的事情。 例如,正则表达式foo(bar|bat)baz匹配:

  • foo ,然后是
  • 要么bar要么bat ,然后是
  • baz

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

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

@-quoted 字符串有助于避免过多反斜杠引起的麻烦。 没有它,你必须写“四十五\\(45\\)”。

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

forty-five [(]45[)]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM