我想編寫一個正則表達式來檢查一個字符串是否有3個大寫的lettrs。這些信件不必一個接一個。正則表達式來檢查任何地方的3個大寫字母
我知道如何使用查詢字符串是否有大寫字母(?=。*?[AZ]),但我不能超越這個
WsswFeA - will match
AAtrW - will match
srABFes - will match
srtZfgQ - will not match
懇求幫助我
我想編寫一個正則表達式來檢查一個字符串是否有3個大寫的lettrs。這些信件不必一個接一個。正則表達式來檢查任何地方的3個大寫字母
我知道如何使用查詢字符串是否有大寫字母(?=。*?[AZ]),但我不能超越這個
WsswFeA - will match
AAtrW - will match
srABFes - will match
srtZfgQ - will not match
懇求幫助我
我不認爲你需要使用lookahead這個。 使用與anubhava一樣的想法,但將其放入正則表達式的正文中也應該起作用。
^(.*[A-Z]){3}.*$
正如您在您的問題.*[A-Z]
中指出的,檢查單個大寫字母。所以爲了尋找其中的3個,我們只重複3次。 (foo){3}
是(foo)(foo)(foo)
的正則表達式縮寫。
在您的正則表達式中,您開始使用?=
組,這意味着這是一個前瞻。這基本上要求匹配器,如果在你當前所在子組上開始的斷言匹配。但是,由於這是我們測試的唯一條件,我們不妨將它作爲我們的主要表達方式並避免向前看。
你可以使用這個表達式:
^(?=(.*?[A-Z]){3}).{3,}$
這positive lookahead
(?=(.*?[A-Z]){3})
將確保確保有至少3個大寫字母輸入文本的任何地方。
如何將'WsswfeA'比賽,因爲只有2個大寫字母。 – anubhava
對不起,它有一個錯字。我已經更新了它。 – nath
好,那麼我的答案應該在所有情況下給你。 – anubhava