2010-02-12 204 views
20

我需要帮助将正则表达式匹配到匹配以“Id”结尾的单词并区分大小写的匹配项。正则表达式:匹配以“Id”结尾的单词

+1

这些词怎么样:'Id'(以'Id'开头和结尾)和'O'HaraId'(你想匹配'O'HaraId'还是'HaraId')和'foo-barId'(do你想匹配'foo-barId'或'barId')?简而言之:请定义“单词”的含义(或者你想要的是什么)。 – 2010-02-12 20:11:28

回答

38

尝试此正则表达式:

\w*Id\b 

\w*允许字字符的Id前面和\b确保Id是在字的结束时(\b是词边界断言)。

+0

@epitka,请注意'\ w'也匹配数字和下划线。简而言之'___ Id'和'12345Id'的字符串也将被匹配。 – 2010-02-12 20:17:29

+0

我给你一个upvote,但是外延并没有指定是否只是“Id”是允许的,所以我会试图改变*为+ – BenAlabaster 2010-02-12 20:19:17

+0

最好的答案:简短易懂! – huug 2013-03-08 11:51:34

4

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

1
Regex ids = new Regex(@"\w*Id\b", RegexOptions.None); 

“\ B” 表示 “字破发” & \ W指的是任何单词字符,所以\ W *身份证\ B表示“{东西}ID”。通过不包括RegexOptions.IgnoreCase,它将区分大小写。

2

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

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

请注意,这会匹配中间有大写字母的单词,如'teStId'。

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

+0

设置'a-z'不包括'é'和其他类似的字符。也许不是一个问题,但外延可能想知道的东西。 – 2010-02-12 20:18:44

+1

[A-Za-z]与非英文字母字符不匹配,所以应避免使用\ w,除非可以保证只出现英文字母。 – BenAlabaster 2010-02-12 20:20:40

5

这可能做的伎俩:

\b\p{L}*Id\b 

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

+0

\ p {L}在C#regex中工作吗?我以前从来没有见过,通常选择\ w – BenAlabaster 2010-02-12 20:18:19

+0

@BenAlabaster,是的:http://msdn.microsoft.com/en-us/library/20bw873z.aspx#SupportedUnicodeGeneralCategories是的,也许'\ w'是对于OP来说足够了,但它比字母更匹配(请参阅我在Gumbo的帖子下的评论)。 – 2010-02-12 20:21:28

7

浓汤得到我的投票,但是,OP不指定是否只是“ID”被允许的话,这意味着我会做一个小的修改:

\w+Id\b 

1个或多个单词字符后跟通过“Id”和一个突破的空间。 [a-zA-Z]变体不考虑非英文字母字符。我也可以用\ s而不是\ b作为空格而不是空格。这取决于你是否需要包装多行。

相关问题