【发布时间】:2022-08-02 05:02:42
【问题描述】:
我需要帮助组合一个正则表达式,它将匹配以 \"Id\" 结尾的单词和区分大小写的匹配。
-
这些词怎么样:
Id(以Id开头和结尾)和O\'HaraId(你想匹配O\'HaraId或HaraId)和foo-barId(你想匹配foo-barId或@ 987654328@)?简而言之:请定义“单词”的含义(或您想要的含义)。
我需要帮助组合一个正则表达式,它将匹配以 \"Id\" 结尾的单词和区分大小写的匹配。
Id(以Id开头和结尾)和O\'HaraId(你想匹配O\'HaraId或HaraId)和foo-barId(你想匹配foo-barId或@ 987654328@)?简而言之:请定义“单词”的含义(或您想要的含义)。
试试这个正则表达式:
\w*Id\b
\w* 允许 Id 前面的单词字符,\b 确保 Id 位于单词末尾(\b 是单词边界断言)。
【讨论】:
\w 也匹配数字和下划线。简而言之,字符串___Id 和12345Id 也将被匹配。
Gumbo 得到了我的投票,但是,OP 没有指定“Id”是否是一个允许的词,这意味着我会做一个小的修改:
\w+Id\b
1 个或多个单词字符后跟“Id”和一个空格。 [a-zA-Z] 变体不考虑非英文字母字符。我也可以使用 \s 而不是 \b 作为空格而不是分隔空格。这取决于您是否需要覆盖多行。
【讨论】:
这可能会奏效:
\b\p{L}*Id\b
其中\p{L} 匹配任何(Unicode)字母,\b 匹配单词边界。
【讨论】:
\w 对于 OP 来说已经足够了,但它匹配的不仅仅是字母(请参阅我在 Gumbo 帖子下的评论)。
\A[a-z]*Id\z 怎么样? [这使得Id 之前的字符可选。如果需要在Id 之前有一个或多个字符,请使用\A[a-z]+Id\z。]
【讨论】:
\z 和我一起工作,而在所有其他答案中提到的\b 不起作用?
我会用\b[A-Za-z]*Id\b
\b 匹配单词的开头和结尾,即空格、制表符或换行符,或者字符串的开头或结尾。
[A-Za-z] 将匹配任何字母,* 表示匹配 0+。最后是Id。
请注意,这将匹配中间有大写字母的单词,例如“teStId”。
我使用http://www.regular-expressions.info/ 作为正则表达式参考
【讨论】:
a-z 不包括é 和其他类似字符。也许不是问题,但有些 Epitka 可能想知道。
Regex ids = new Regex(@"\w*Id\b", RegexOptions.None);
\b 表示“分词”,\w 表示任何单词字符。所以\w*Id\b 的意思是“{stuff}Id”。如果不包括RegexOptions.IgnoreCase,它将区分大小写。
【讨论】: