我使用正则表达式\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???) 有人知道为什么会发生这种情况以及如何匹配结尾处的可选#吗?
因为\b标记着单词的边界。在正则表达式中,单词被视为字母数字符号的序列(请参见此处),不包括其他字符。在第一个示例中,a是一个字母,因此Ca是一个单词。在第二个示例中,#不是字母数字字符,因此单词只包含C。要看到区别,请尝试删除\b:string s2 = Regex.Replace("Bla C# bla", @"C#?", "[$0]"); // Bla [C#] bla 如果您需要\b这种边界-请查看此线程并获取一些建议。