.Net正则表达式匹配字符串“ C#”

JFT*_*TxJ 1 .net c# regex

我正在尝试构建一个正则表达式(使用.Net的RegEx对象)以匹配具有单词边界的字符“ C#”序列。

因此,在字符串“我是C#开发人员,但我不是C#developper”中进行搜索时,我试图匹配第一个“ C#”(作为一个单词),而不是第二个“ C#”,后者是字。

  • 我尝试过模式“ \ bC#\ b”,没有匹配项。

  • 我也尝试过模式“ \ bC#\ b”(试图对#进行转义),没有匹配项。

我读过某个地方,井号(#)可以解释为单词边界。这是真的?如果是这样,我们如何查找该字符串(“ C#”)作为单词?

The*_*ird 5

\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)

正则表达式演示

  • 我想对\ W(非单词)字符进行积极的前瞻也许更好,否则像“我正在用C#编程”中的标点符号会破坏汤。(或者,如果允许与输入字符串末尾出现的C#匹配,甚至可以使用正向前瞻,包括`(?= \ W | $)之类的文本结尾锚点) (4认同)