这是来自MS的一个例子。我不明白为什么在先生\。?在C#中有两个转义字符,在一个正则表达式测试器中,只需要写一个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));
}
答案 0 :(得分: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。否则,发生编译时错误。
所以第一个反斜杠就是让字符串有效 - 它与Regex没有任何关系。
第二件事是,句号意味着“匹配任何字符”在正则表达式中匹配实际句号它必须使用单个斜杠进行转义。
单斜杠只需要第二个斜杠,只是为了使字符串文字有效。
答案 1 :(得分:0)
您需要\
来逃避.
字符,并且您必须使用2 \
,以便第一个\
也被转义。
Mr. - means match Mr[anything]
Mr\. - means match Mr\[anything]
Mr\\. - means match Mr.
我希望这是可以理解的。
答案 2 :(得分:0)
我通过在C#中查找常规字符串的属性(如选择逐字字符串)找到了解决方案。在一个字符串内#34; " a \只能与某些字符组合使用,例如,可以使用\ t oder \ n,但是。不被允许。所以要得到输出(先生必须写#34;(先生\。,以便第一个\逃脱第二个。