2012-04-09 73 views
18
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)使用的重置值?

回答

16

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