我正在尝试构建一个正则表达式(使用.Net的RegEx对象),以使带有字符边界的字符“ C#”序列匹配。
因此,在字符串“我是C#开发人员,但我不是C#developper”中进行搜索时,我试图匹配第一个“ C#”(总之),而不是第二个“ C#”,即一个词的一部分。
我尝试了模式“ \ bC#\ b”,但没有匹配项。
我也尝试过模式“ \ bC#\ b”(试图对#进行转义),没有匹配项。
我在某处读到井号(#)可以解释为单词边界。这是真的?如果是这样,我们如何寻找该字符串(“ C#”)作为单词?
答案 0 :(得分:5)
\b
在井号和空格之间不匹配,因为它们都与非单词字符匹配,但在井号和d char之间确实匹配。
您可以使用否定的前瞻\b
来断言右边的不是非空白\S
字符,而不是第二个word boundary (?!
:< / p>
\bC#(?!\S)
正如@elgonzo的注释中指出的那样,为了防止在C#
后出现非单词char时中断匹配,您可以使用正向先行来断言右边的是非字符char \W
或声明字符串$
的结尾
\bC#(?=\W|$)
答案 1 :(得分:0)
以下RegEx匹配不区分大小写的第一个单词/最后一个单词/换行符/空格
/(:?^|\s)C#(:?$|\s)/i