C#Regex为什么在下面的示例中需要2\\?

C#Regex为什么在下面的示例中需要2\\?,c#,C#,这是一个来自女士的例子,我不明白为什么是先生。?等等。在C#中有2个转义字符,在正则表达式测试程序中,一个人只需写Mr.?,因此它必须是C#特有的 public static void Main() { string pattern = "(Mr\\.? |Mrs\\.? |Miss |Ms\\.? )"; string[] names = { "Mr. Henry Hunt", "Ms. Sara Samuels", "Abraham

这是一个来自女士的例子,我不明白为什么是先生。?等等。在C#中有2个转义字符,在正则表达式测试程序中,一个人只需写Mr.?,因此它必须是C#特有的

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));
} 

您需要使用
\
来转义
字符,并且必须使用2
\
才能转义第一个
\

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

我希望这是可以理解的

这里发生了两件事。在c#中,字符串中的某些字符需要转义序列:

在常规字符串文字字符中,紧跟反斜杠()的字符必须是以下字符之一:'、“、\、0、A、b、f、n、r、t、u、u、x、v。否则,将发生编译时错误

因此,第一个反斜杠是使字符串有效-它与正则表达式无关

第二件事是句点在正则表达式中的意思是“匹配任何字符”,因此要匹配实际的句点,必须用一个斜杠将其转义


单斜杠需要第二个斜杠,以使字符串文字有效。

我通过在C#中查找常规字符串(与逐字字符串类似)的属性找到了解决方案。在字符串中”“\只能与某些字符组合使用,例如,可以使用\t order\n,但是。”。这是不允许的。因此,要获得输出(Mr.one必须编写“(Mr\,以便第一个\逃逸第二个)。

点是正则表达式中的一个特殊字符,必须对其进行scape,因为这是反斜杠…我已粘贴在代码中,但重要的部分是错误的,它应该读作Mr\\.?| Mrs\.?|…稍微整洁一点,并保存斜杠[{1}r,s,I][{1}s,.]?您可以使用@AlsowWhy you want to escape character..我不确定这个解释我从未读过必须转义转义字符!对我来说,\\表示普通字符\n没有转义的意思。@NewbieEK
仅在正则表达式中不是普通字符串中的特殊字符,因此第二个`是不是第一个逃走了