2016-11-11 68 views
1

這是來自MS的一個例子。我不明白爲什麼在先生\?等等。在C#中有2個轉義字符,在正則表達式測試器中,只能編寫Mr。?,所以它必須是C#特有的。C#正則表達式爲什麼2 \在下面的例子中需要?

public static void Main() 
{ 
    string pattern = "(Mr\\.? |Mrs\\.? |Miss |Ms\\.?)"; 
    string[] names = { "Mr. Henry Hunt", "Ms. Sara Samuels", 
         "Abraham Adams", "Ms. Nicole Norris" }; 
    foreach (string name in names) 
     Console.WriteLine(Regex.Replace(name, pattern, String.Empty)); 
} 
+0

點是一個特殊的字符在正則表達式,它必須scaped,因爲這是反斜槓.. –

+0

我已經粘貼了代碼,但重要的部分是錯誤的,它應該閱讀Mr \\。| | Mrs \\。?| | –

+0

有點整潔並保存你的斜槓[{1} M] [{ 1} r,s,i] [{1} s,。] [s]?[。]?http://regexr.com/ – DaImTo

回答

0

您需要\逃脫.字符,你必須使用2 \使得第一\也逃脫。

Mr. - means match Mr[anything] 
Mr\. - means match Mr\[anything] 
Mr\\. - means match Mr. 

我希望這是可以理解的。

+0

爲什麼你想逃避轉義字符..我不知道這個解釋 –

+0

我從來沒有讀過那個人必須逃避轉義字符!對我來說,\\意思是簡單的字符\不在意義上作爲轉義 –

+0

@NewbieEK'.'不是在正則字符串中的特殊字符僅在正則表達式中,所以第二個'\'在那裏,以便第一個一個人逃脫了 – TheLethalCoder

2

這裏有兩件事情。在c#有在字符串中某些字符需要轉義序列:

https://msdn.microsoft.com/en-us/library/aa691090(v=vs.71).aspx

下面反斜線字符()是一個常規字串文本字符的字符必須是以下字符中的一個:',「,\,0,a,b,f,n,r,t,u,U,x,v否則會發生編譯時錯誤

所以第一個反斜槓是使字符串有效 - 它與正則表達式無關。

第二件事情是,期間的意思是「匹配任何字符」的正則表達式,以匹配實際期間它必須用一個斜槓逃脫。

單斜槓只需要第二個斜槓就可以使字符串文字有效。

0

我在C#中查找了一個常規字符串的屬性 - 就像一個逐字字符串 - 找到了解決方案。在字符串內部「」a \只能與某些字符結合使用,例如可以使用\ t oder \ n,但是。不允許。因此,要得到輸出(先生必須寫「先生\,使第一\ \逃脫第二個。

相關問題