我想编写一个正则表达式来检查字符串是否有3个大写字母。这些信件不一定要一个接一个。
我知道如何使用(?=。*?[A-Z])检查字符串是否有任何大写字母,但我不能超越这个
WsswFeA - will match
AAtrW - will match
srABFes - will match
srtZfgQ - will not match
请求帮助我
答案 0 :(得分:2)
我认为你不需要使用前瞻。 使用与anubhava相同的想法,但将它放在正则表达式的主体中也应该有效。
^(.*[A-Z]){3}.*$
正如您在问题中所提到的,.*[A-Z]
检查单个大写字母。因此,为了寻找其中的3个,我们只重复3次。 (foo){3}
是(foo)(foo)(foo)
的正则表达式简写。
在正则表达式中,您使用?=
启动了该组,这意味着这是一个先行。这基本上要求匹配器在您当前所在的子组上开始的断言是否匹配。但是,由于这是我们测试的唯一条件,我们也可以将它作为我们的主要表达并避免前瞻。
答案 1 :(得分:1)
您可以使用此正则表达式:
^(?=(.*?[A-Z]){3}).{3,}$
此positive lookahead
(?=(.*?[A-Z]){3})
将确保输入文本中的任意位置至少有3个大写字母。
答案 2 :(得分:0)