我正在尝试构建一个正则表达式(使用.Net的RegEx对象)以匹配具有单词边界的字符“ C#”序列。
因此,在字符串“我是C#开发人员,但我不是C#developper”中进行搜索时,我试图匹配第一个“ C#”(作为一个单词),而不是第二个“ C#”,后者是字。
我尝试过模式“ \ bC#\ b”,没有匹配项。
我也尝试过模式“ \ bC#\ b”(试图对#进行转义),没有匹配项。
我读过某个地方,井号(#)可以解释为单词边界。这是真的?如果是这样,我们如何查找该字符串(“ C#”)作为单词?
在\b没有井号和空间之间的匹配,因为它们都匹配非单词字符,但确实英镑符号和d字符之间的匹配。
除了使用第二个单词边界 \b,您还可以\S使用否定先行断言右边的字符不是非whitspace 字符(?!:
\bC#(?!\S)
Run Code Online (Sandbox Code Playgroud)
正如@elgonzo的注释中指出的那样,为防止在出现非单词char时中断匹配C#,您可以使用正向先行来断言右边的内容是非word char \W或声明字符串的结尾$
\bC#(?=\W|$)
Run Code Online (Sandbox Code Playgroud)