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

3

我使用正则表达式\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个回答

5
因为\b标记着单词的边界。在正则表达式中,单词被视为字母数字符号的序列(请参见此处),不包括其他字符。在第一个示例中,a是一个字母,因此Ca是一个单词。在第二个示例中,#不是字母数字字符,因此单词只包含C
要看到区别,请尝试删除\b
string s2 = Regex.Replace("Bla C# bla", @"C#?", "[$0]"); // Bla [C#] bla

如果您需要\b这种边界-请查看此线程并获取一些建议。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接