System.Text.RegularExpressions.Regex.Escape()
只能脫開大括號。是否有一個.NET Framework方法逃避了在正則表達式中使用大括號?我似乎無法找到任何。我討厭硬編碼字符。逃脫關閉大括號
編輯:我需要爲平衡組定義生成「(?< -open>)」標記。我收到代表結尾分隔符的字符列表,將它們轉義並將它們添加到「(?< -open>)」標記中的表達式中。所以,是的,我真的不得不逃避右花括號。
System.Text.RegularExpressions.Regex.Escape()
只能脫開大括號。是否有一個.NET Framework方法逃避了在正則表達式中使用大括號?我似乎無法找到任何。我討厭硬編碼字符。逃脫關閉大括號
編輯:我需要爲平衡組定義生成「(?< -open>)」標記。我收到代表結尾分隔符的字符列表,將它們轉義並將它們添加到「(?< -open>)」標記中的表達式中。所以,是的,我真的不得不逃避右花括號。
當我嘗試它時,Regex.Escape確實會逃脫。你的代碼中還有其他的東西嗎?發佈一個可重複使用的轉義代碼和正則表達式的例子會很有幫助。我認爲蒂姆的評論可能也是關於發生了什麼的標誌。
FWIW,測試Regex.Escape()給出了以下結果:
Regex.Escape("(Hello)"); // \(Hello\)
Regex.Escape("Hello)"); // Hello\)
Regex.Escape("(Hello"); // \(Hello
編輯:從我明白你的意思的意見確定{現在,並與測試給你說的結果。 Regex.Escape()試圖在需要時才轉義,但如果這不是你想要的,那麼沒有任何其他內置方法可以工作。我認爲你必須1)添加它自己丟失的內容,或者2)如果可能的話,以不同的方式格式化你的輸入字符串,這樣Regex.Escape將按預期工作。
如在評論說以上,退出函數的行爲如下(MSDN):
轉義最少的一組字符(\,*,+,的|,{[? ,(,),^,$,。,#,和空格)替換它們的轉義碼。這指示正則表達式引擎逐字地解釋這些字符而不是元字符。
以下備註添加:
雖然退出方法逸出的直開口括號([)和開口括號({)字符,它不會逃脫其相應的閉合字符(]和} )。在大多數情況下,逃避這些是沒有必要的。 如果右括號或大括號沒有對應的開頭字符,則正則表達式引擎會按字面解釋。如果開頭的大括號或大括號被解釋爲元字符,則正則表達式引擎將第一個對應的結尾字符解釋爲元字符。如果這不是所需的行爲,則應通過顯式預置反斜槓()字符來隱藏結束括號或大括號。有關說明,請參閱示例部分。
因此,如果解釋器發現不被開口{
它將自動地逃脫它前面一個}
。
MSDN說:「如果右括號或大括號沒有對應的開頭字符,則正則表達式引擎會直接解釋它」。你確定你需要逃避閉合括號嗎? –
@TimBourguignon:我想你也可以把這個作爲答案。 –