我想编写一个正则表达式来检查字符串是否有 3 个大写字母。这些字母不必是一个接一个。
我知道如何使用 (?=.*?[A-Z]) 检查字符串是否有大写字母,但我无法超越此
WsswFeA - will match
AAtrW - will match
srABFes - will match
srtZfgQ - will not match
请帮助我
最佳答案
我认为您不需要为此使用前瞻。 使用与 anubhava 相同的想法,但将其放在正则表达式的主体中也应该可行。
^(.*[A-Z]){3}.*$
正如您在问题中所指出的.*[A-Z]
检查单个大写字母。因此,要查找其中 3 个,我们只需重复 3 次即可。 (foo){3}
是 (foo)(foo)(foo)
的正则表达式简写。
在您的正则表达式中,您以 ?=
开始该组,这意味着这是一个前瞻。这本质上是询问匹配器是否存在从您当前所在的子组开始的断言匹配。然而,由于这是我们正在测试的唯一条件,我们不妨将其作为我们的主要表达式并避免先行。
关于regex - 正则表达式检查任意位置的 3 个大写字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20538667/