比方說你有:爲什麼Regex.Replace會離開括號?
string result = Regex.Replace("people (MANY)", "(many)", "", RegexOptions.IgnoreCase);
再經過這樣的結果將是people()
。爲什麼是這樣的,我如何改變正則表達式替換去除括號?
比方說你有:爲什麼Regex.Replace會離開括號?
string result = Regex.Replace("people (MANY)", "(many)", "", RegexOptions.IgnoreCase);
再經過這樣的結果將是people()
。爲什麼是這樣的,我如何改變正則表達式替換去除括號?
你必須轉義:http://msdn.microsoft.com/en-us/library/4edbef7e(v=vs.110).aspx
下面的字符在正則表達式中逃脫,因爲他們有模式匹配一個意思:
。 $^{[(|)* +? \
可以逃避用反斜槓\
這個特殊的字符在你的情況\(
和\)
您的代碼相應改變:
string result = Regex.Replace("people (MANY)", "\(many\)", "", RegexOptions.IgnoreCase);
這是因爲括號在正則表達式模式的意義。他們定義了一個capturing group。
逃生括號,使他們不被視爲特殊字符,但括號:
string result = Regex.Replace("people (MANY)", @"\(many\)", "", RegexOptions.IgnoreCase);
改變它
string result = Regex.Replace("people (MANY)", @"\(many\)", "", RegexOptions.IgnoreCase);
的()意味着正則表達式引擎一些特別的東西,所以你必須逃避它們。
括號是分組的特殊字符,你需要轉義:
Regex.Replace("people (MANY)", @"\(many\)", "", RegexOptions.IgnoreCase);
括號在正則表達式特殊的意義 - 他們爲捕捉(因此在更換,你可以使用$ 1它會給你什麼是在parens)。如果你想有一個文本,你必須轉義:\(
括號在正則表達式讓你定義一個capture group你需要轉義爲他們被視爲常規字符
在正則表達式有一組。 (\,*,+,?,|,{,[,(,),^,$,。,#和空格),如果您希望它們始終以您的模式表示,需要逃避它們。
有一種普遍的功能Regex.Escape
,將經過上述名單和逃生每次它找到你的實例。
Regex.Escape("(many)") // this becomes \(many\)
有用的功能知道!事實上,只是在我的第二個代碼實例中使用它,其中匹配的字符串已經在變量中。 – Knightsy