2013-12-12 65 views
1

我想編寫一個正則表達式來檢查一個字符串是否有3個大寫的lettrs。這些信件不必一個接一個。正則表達式來檢查任何地方的3個大寫字母

我知道如何使用查詢字符串是否有大寫字母(?=。*?[AZ]),但我不能超越這個

WsswFeA - will match 
AAtrW - will match 
srABFes - will match 
srtZfgQ - will not match 

懇求幫助我

+0

如何將'WsswfeA'比賽,因爲只有2個大寫字母。 – anubhava

+0

對不起,它有一個錯字。我已經更新了它。 – nath

+0

好,那麼我的答案應該在所有情況下給你。 – anubhava

回答

2

我不認爲你需要使用lookahead這個。 使用與anubhava一樣的想法,但將其放入正則表達式的正文中也應該起作用。

^(.*[A-Z]){3}.*$ 

正如您在您的問題.*[A-Z]中指出的,檢查單個大寫字母。所以爲了尋找其中的3個,我們只重複3次。 (foo){3}(foo)(foo)(foo)的正則表達式縮寫。

在您的正則表達式中,您開始使用?=組,這意味着這是一個前瞻。這基本上要求匹配器,如果在你當前所在子組上開始的斷言匹配。但是,由於這是我們測試的唯一條件,我們不妨將它作爲我們的主要表達方式並避免向前看。

+0

你的答案是正確的。由於我是一個新手,你可以解釋這是如何工作的。 – nath

+0

我已經添加了正則表達式如何工作的簡短說明。 – Taemyr

1

你可以使用這個表達式:

^(?=(.*?[A-Z]){3}).{3,}$ 

positive lookahead(?=(.*?[A-Z]){3})將確保確保有至少3個大寫字母輸入文本的任何地方。

0

你應該試試這個:

^(.*[A-Z]){3,}.*$ 

Regex Demo

相關問題