【问题标题】:Regex: match word that ends with "Id"正则表达式:匹配以 \"Id\" 结尾的单词
【发布时间】:2022-08-02 05:02:42
【问题描述】:

我需要帮助组合一个正则表达式,它将匹配以 \"Id\" 结尾的单词和区分大小写的匹配。

  • 这些词怎么样:Id(以Id开头和结尾)和O\'HaraId(你想匹配O\'HaraIdHaraId)和foo-barId(你想匹配foo-barId或@ 987654328@)?简而言之:请定义“单词”的含义(或您想要的含义)。

标签: c# regex


【解决方案1】:

试试这个正则表达式:

\w*Id\b

\w* 允许 Id 前面的单词字符,\b 确保 Id 位于单词末尾(\b 是单词边界断言)。

【讨论】:

  • @epitka,请注意 \w 也匹配数字和下划线。简而言之,字符串___Id12345Id 也将被匹配。
  • 我给了你一个赞成票,但 Epitka 没有指定是否只允许“Id”,所以我很想将 * 更改为 +
  • 最佳答案: 简短易懂!
  • 我发现它与以 ID 结尾的字符串不匹配。你需要在最后做 \z 而不是 \b
【解决方案2】:

Gumbo 得到了我的投票,但是,OP 没有指定“Id”是否是一个允许的词,这意味着我会做一个小的修改:

\w+Id\b

1 个或多个单词字符后跟“Id”和一个空格。 [a-zA-Z] 变体不考虑非英文字母字符。我也可以使用 \s 而不是 \b 作为空格而不是分隔空格。这取决于您是否需要覆盖多行。

【讨论】:

    【解决方案3】:

    这可能会奏效:

    \b\p{L}*Id\b
    

    其中\p{L} 匹配任何(Unicode)字母,\b 匹配单词边界。

    【讨论】:

    • \p{L} 在 C# 正则表达式中工作吗?我以前从未见过那个,通常选择 \w
    • @BenAlabaster,是的:msdn.microsoft.com/en-us/library/… 是的,也许 \w 对于 OP 来说已经足够了,但它匹配的不仅仅是字母(请参阅我在 Gumbo 帖子下的评论)。
    【解决方案4】:

    \A[a-z]*Id\z 怎么样? [这使得Id 之前的字符可选。如果需要在Id 之前有一个或多个字符,请使用\A[a-z]+Id\z。]

    【讨论】:

    • 为什么\z 和我一起工作,而在所有其他答案中提到的\b 不起作用?
    【解决方案5】:

    我会用
    \b[A-Za-z]*Id\b
    \b 匹配单词的开头和结尾,即空格、制表符或换行符,或者字符串的开头或结尾。

    [A-Za-z] 将匹配任何字母,* 表示匹配 0+。最后是Id。

    请注意,这将匹配中间有大写字母的单词,例如“teStId”。

    我使用http://www.regular-expressions.info/ 作为正则表达式参考

    【讨论】:

    • 集合a-z 不包括é 和其他类似字符。也许不是问题,但有些 Epitka 可能想知道。
    • [A-Za-z] 不匹配非英文字母字符,因此应避免使用 \w ,除非可以保证只会出现英文字母。
    【解决方案6】:
    Regex ids = new Regex(@"\w*Id\b", RegexOptions.None);
    

    \b 表示“分词”,\w 表示任何单词字符。所以\w*Id\b 的意思是“{stuff}Id”。如果不包括RegexOptions.IgnoreCase,它将区分大小写。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-21
      • 1970-01-01
      • 1970-01-01
      • 2018-02-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多