处理包含美元字符的正则表达式转义替换文本
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!"
,但我想知道美元符号是否是我必须逃脱的唯一值(假设replacement
是用户生成的,我不提前知道),或者是否有帮助函数已经执行此操作。
有没有人知道一个函数来逃避Regex.Replace(string input, string pattern, string replacement)
使用的替换值?
来自MSDN :
replacement参数指定要替换输入中每个匹配项的字符串。 替换可以包括文字文本和替换的任何组合。
定义了以下替换:
- $号
- $ {NAME}
- $$
- $&
- $`
- $”
- $ +
- $ _
替换是替换模式中唯一识别的特殊构造。 不支持其他正则表达式语言元素,包括字符转义和与任何字符匹配的句点(。)。 类似地,替换语言元素仅在替换模式中被识别,并且在正则表达式模式中永远不会有效。
所以它看起来只是需要转义的$字符。