我对正则表达式\bC#?\b
string s1 = Regex.Replace("Bla Ca bla", @"\bCa?\b", "[$0]"); // Bla [Ca] bla (as expected)
string s2 = Regex.Replace("Bla C# bla", @"\bC#?\b", "[$0]"); // Bla [C]# bla (why???)
有没有人理解为什么会发生这种情况以及如何在最后匹配可选的#
?
答案 0 :(得分:5)
因为\b
标记了单词的边界。在正则表达式中,单词被视为一系列字母数字符号(请参阅here),其他字符不包括在内。在第一个示例中,a
是一个字母,因此Ca
是一个单词。第二个#
不是字母数字字符,因此单词仅由C
组成。
要查看差异,请尝试删除\b
:
string s2 = Regex.Replace("Bla C# bla", @"C#?", "[$0]"); // Bla [C#] bla
如果您需要\b
种边界 - 请查看this thread并提供一些建议。