正则表达式不匹配单词边界之间的哈希字符

时间:2014-03-15 00:28:13

标签: c# regex

我对正则表达式\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???)

有没有人理解为什么会发生这种情况以及如何在最后匹配可选的#

1 个答案:

答案 0 :(得分:5)

因为\b标记了单​​词的边界。在正则表达式中,单词被视为一系列字母数字符号(请参阅here),其他字符不包括在内。在第一个示例中,a是一个字母,因此Ca是一个单词。第二个#不是字母数字字符,因此单词仅由C组成。

要查看差异,请尝试删除\b

string s2 = Regex.Replace("Bla C# bla", @"C#?", "[$0]"); // Bla [C#] bla

如果您需要\b种边界 - 请查看this thread并提供一些建议。