【问题标题】:.Net Regular Expression matching the string "C#".Net 正则表达式匹配字符串“C#”
【发布时间】:2019-04-30 20:01:15
【问题描述】:

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

所以在字符串“我是 C# 开发人员,但我不是 C#developper”中搜索,我试图匹配第一个“C#”(作为一个词)而不是第二个“C#”词的一部分。

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

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

我在某处读到井号 (#) 符号可以解释为单词边界。这是真的?如果是这样,我们如何将那个字符串(“C#”)作为一个词来查找?

【问题讨论】:

    标签: c# .net regex


    【解决方案1】:

    \b 在井号和空格之间不匹配,因为它们都匹配非单词字符,但在井号和 d 字符之间匹配。

    除了第二个word boundary \b,您可以断言右边的不是非空白\S 字符,使用否定前瞻(?!

    \bC#(?!\S)
    

    Regex demo

    正如@elgonzo 在 cmets 中指出的那样,为了防止在 C# 后面跟着非单词 char 时破坏匹配,您可以使用正向前瞻来断言右侧的内容要么是非单词 char @987654332 @ 或断言字符串的结尾$

    \bC#(?=\W|$)
    

    Regex demo

    【讨论】:

    • 我想对\W(非单词)字符进行积极的前瞻可能会更好,否则"I am programming in C#."中的标点符号会破坏汤。 (或者甚至是一个积极的前瞻,包括像(?=\W|$)这样的文本结束锚,如果它应该被允许匹配出现在输入字符串末尾的C#)
    • @elgonzo 如果您使用\W 使用肯定的前瞻,您希望实际上有一个非单词字符,因此不会匹配"I am programming in C#" 在这种情况下,也许\bC#(?![^\s.]) 会更好地使用一个否定的字符类。 regex101.com/r/nBoH8O/2
    • @elgonzo 啊,我想我错过了你评论中的那部分。我明白你的意思。我会更新答案。
    • 公平地说,我编辑了我的评论并在首先发布我的评论后不久添加了该信息。虽然我在您的评论回复出现前一段时间对其进行了编辑,但您可能错过了我的编辑。对于可能造成的任何混乱,我们深表歉意 ;-)
    • 最终我最终使用了 "\bC#(?=\W|$)" 作为我的正则表达式。它非常适合我的目的。谢谢
    【解决方案2】:

    以下正则表达式匹配第一个单词/最后一个单词/换行符/空格不区分大小写

    /(:?^|\s)C#(:?$|\s)/i

    【讨论】:

      猜你喜欢
      • 2023-03-13
      • 2011-12-21
      • 2012-06-05
      • 2013-12-25
      • 1970-01-01
      相关资源
      最近更新 更多