包含美元字符

问题描述:

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}的
  • $$
  • $ &
  • $`
  • $”
  • $ +
  • $ _

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

所以它看起来像只有$字符需要逃脱。

+1

同样来自MSDN:替换是在替换模式中识别的唯一正则表达式语言元素。所有其他正则表达式语言元素(包括字符转义符)只能在正则表达式模式中使用,并且不会在替换模式中识别。 – Gebb 2012-04-09 19:10:05

+0

这对我来说看起来不错,我怀疑做了一个哑巴ol替换。替换(“$”,“$$”)'应该是100%的时间吗? – Matthew 2012-04-09 19:18:11

+7

是的,'replacement.Replace(“$”,“$$”)'应该是你需要的。 – dtb 2012-04-09 19:19:25