2010-02-12 201 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作爲空格而不是空格。這取決於你是否需要包裝多行。

相關問題