处理包含美元字符的正则表达式转义替换文本

时间:2012-04-09 18:57:48

标签: c# regex escaping

string input = "Hello World!";
string pattern = "(World|Universe)";
string replacement = "$1";

string result = Regex.Replace(input, pattern, replacement);

有了以下示例,结果将是"Hello World!",因为$1被第一个组(World|Universe)取代,但我想要的结果是"Hello $1!"

Regex.Escape方法用于转义正则表达式模式,而不是替换,因为它可以转义其他字符,如斜杠和其他正则表达式模式字符。对我的问题的明显解决方法是让我的替换等于"$$1",并且将达到"Hello $1!",但我想知道美元符号是否是我必须逃脱的唯一值(假设{{1}是用户生成的,我不提前知道它,或者是否有帮助函数已经执行此操作。

有没有人知道一个函数来逃避replacement使用的替换值?

1 个答案:

答案 0 :(得分:17)

来自MSDN

  

replacement 参数指定要替换 input 中每个匹配项的字符串。 替换可以包含文字文本和substitutions的任意组合。

以下替换are defined

  • $数目
  • $ {名称}
  • $$
  • $&安培;
  • $`
  • $'
  • $ +
  • $ _
  

替换是替换模式中唯一识别的特殊构造。不支持其他正则表达式语言元素,包括字符转义和与任何字符匹配的句点(。)。类似地,替换语言元素仅在替换模式中被识别,并且在正则表达式模式中永远不会有效。

所以它看起来只是需要转义的$字符。