2014-03-13 49 views
1

比方說你有:爲什麼Regex.Replace會離開括號?

string result = Regex.Replace("people (MANY)", "(many)", "", RegexOptions.IgnoreCase); 

再經過這樣的結果將是people()。爲什麼是這樣的,我如何改變正則表達式替換去除括號?

回答

4

你必須轉義:http://msdn.microsoft.com/en-us/library/4edbef7e(v=vs.110).aspx

下面的字符在正則表達式中逃脫,因爲他們有模式匹配一​​個意思:

。 $^{[(|)* +? \

可以逃避用反斜槓\這個特殊的字符在你的情況\(\)

您的代碼相應改變:

string result = Regex.Replace("people (MANY)", "\(many\)", "", RegexOptions.IgnoreCase); 
1

這是因爲括號在正則表達式模式的意義。他們定義了一個capturing group

逃生括號,使他們不被視爲特殊字符,但括號:

string result = Regex.Replace("people (MANY)", @"\(many\)", "", RegexOptions.IgnoreCase); 
1

改變它

string result = Regex.Replace("people (MANY)", @"\(many\)", "", RegexOptions.IgnoreCase); 

的()意味着正則表達式引擎一些特別的東西,所以你必須逃避它們。

1

括號是分組的特殊字符,你需要轉義:

Regex.Replace("people (MANY)", @"\(many\)", "", RegexOptions.IgnoreCase); 
0

括號在正則表達式特殊的意義 - 他們爲捕捉(因此在更換,你可以使用$ 1它會給你什麼是在parens)。如果你想有一個文本,你必須轉義:\(

1

括號在正則表達式讓你定義一個capture group你需要轉義爲他們被視爲常規字符

4

在正則表達式有一組。 (\,*,+,?,|,{,[,(,),^,$,。,#和空格),如果您希望它們始終以您的模式表示,需要逃避它們。

有一種普遍的功能Regex.Escape,將經過上述名單和逃生每次它找到你的實例。

Regex.Escape("(many)") // this becomes \(many\) 
+0

有用的功能知道!事實上,只是在我的第二個代碼實例中使用它,其中匹配的字符串已經在變量中。 – Knightsy