2016-01-09 40 views
2

我試圖做在Python轉換到C#轉換的Python應用re.sub到C#

sconvert = re.sub(r"([.$+?{}()\[\]\\])", r"\\\1", sconvert) 

我無法找到一個C#.NET相當於此功能,以方便。

從Python手冊

應用re.sub(圖案,REPL,串,計數= 0,標誌= 0)返回通過替換字符串 圖案的最左邊的非重疊出現獲得的串替換repl。如果未找到該模式,則返回 字符串不變。 repl可以是一個字符串或一個函數;如果 它是一個字符串,則處理它中的任何反斜槓轉義。即,\ n 轉換爲單個換行符,\ r轉換爲回車符 ,依此類推。像\ j這樣的未知轉義字符只剩下 。反向引用(例如\ 6)被替換爲模式中與組6匹配的子字符串 。

回答

1

你正在尋找一個Regex.Escape method

轉義最小的一組字符(\*+?|{[()^$.的, #空白空間),用它們的轉義代碼替換它們。這指示正則表達式引擎逐字地解釋這些字符而不是元字符。

sconvert = re.sub(r"([.$+?{}()\[\]\\])", r"\\\1", sconvert)代碼逸出在[.$+?{}()\[\]\\]範圍中指定的字符,以匹配他們表示文字字符。

請注意Regex.Escape也會逸出空格。如果你不希望出現這種情況,使用自定義更換:

var input = "|^.$+?{}()[]\\-"; 
var escaped = Regex.Replace(input, @"[|^.$+?{}()\[\]\\-]", "\\$&"); 
Console.Write(escaped); 
// => \|\^\.\$\+\?\{\}\(\)\[\]\\\- 

我建議增加|-^了。請參閱IDEONE demo

+0

轉義函數會轉義更多字符,然後我想轉義。 – Henry

+1

是的,所以請使用您自己的替換代碼。我建議加入'|','-'和'^'。請注意,在.NET正則表達式中,您不必轉義'{','''','#'和空格(除非在使用RegexOptions.IgnorePatternWhitespace修飾符編譯的正則表達式中使用散列和空格)。 –

+0

謝謝,正則表達式對我而言是如此的陌生。 – Henry