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

Mat*_*hew 19 c# regex escaping

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

string result = Regex.Replace(input, pattern, replacement);
Run Code Online (Sandbox Code Playgroud)

有了下面的例子,结果将是"Hello World!",当$1第一组被替换时(World|Universe),但是我想要的结果是"Hello $1!"

Regex.Escape方法旨在用于转义正则表达式模式,而不是替换,因为它可以转义其他字符,如斜杠和其他正则表达式模式字符.对我的问题的明显解决方法是让我的替换等于"$$1",并将实现"Hello $1!",但我想知道美元符号是否是我必须逃脱的唯一值(假设replacement用户生成,我不提前知道) ,还是有一个辅助功能,已经这样做了.

有没有人知道一个函数来逃避使用的替换值Regex.Replace(string input, string pattern, string replacement)

dtb*_*dtb 18

来自MSDN:

替换参数指定是取代在每个匹配字符串输入.替换可以包含文字文本和替换的任意组合.

定义了以下替换:

  • $号
  • $ {NAME}
  • $$
  • $&
  • $`
  • $"
  • $ +
  • $ _

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

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

  • 是的,`replacement.Replace("$","$$")`应该就是你所需要的. (7认同)