包含美元字符
问题描述:
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:
的更换参数指定用于替换输入每个匹配的字符串。 替换可以由文字文本和substitutions的任意组合组成。
以下替换are defined:
- $数
- $ {name}的
- $$
- $ &
- $`
- $”
- $ + 个
- $ _
取代在替换模式唯一认可的特殊结构。其他正则表达式语言元素(包括字符转义字符和与任何字符匹配的句点(。))都不受支持。类似地,替换语言元素仅在替换模式中被识别,并且在正则表达式模式中永远不会有效。
所以它看起来像只有$字符需要逃脱。
同样来自MSDN:替换是在替换模式中识别的唯一正则表达式语言元素。所有其他正则表达式语言元素(包括字符转义符)只能在正则表达式模式中使用,并且不会在替换模式中识别。 – Gebb 2012-04-09 19:10:05
这对我来说看起来不错,我怀疑做了一个哑巴ol替换。替换(“$”,“$$”)'应该是100%的时间吗? – Matthew 2012-04-09 19:18:11
是的,'replacement.Replace(“$”,“$$”)'应该是你需要的。 – dtb 2012-04-09 19:19:25