以任何顺序匹配正则表达式

时间:2013-09-22 14:31:24

标签: python regex match

我想用正则表达式检查复杂的密码。

它应该有1个1号大写和1个小写字母,不按特定顺序排列。 所以我想这样的事情:

m = re.search(r"([a-z])([A-Z])(\d)", "1Az")
print(m.group())

但我不知道如何告诉他按任何顺序搜索。 我试着在网上看,但我没有找到有趣的东西,感谢您的帮助。

2 个答案:

答案 0 :(得分:8)

你本可以尝试寻找密码验证正则表达式,该网站有很多;)

也就是说,你可以使用positive lookaheads来做到这一点:

re.search(r"(?=.*[a-z])(?=.*[A-Z])(?=.*\d)", "1Az")

并实际匹配字符串......

re.search(r"(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{3}", "1Az")

现在,要确保密码长度为3个字符:

re.search(r"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{3}$", "1Az")

正向前瞻(?= ... )可确保内部表达式出现在要测试的字符串中。因此,字符串必须有一个小写字符((?=.*[a-z])),一个大写字符((?=.*[A-Z]))和一个数字((?=.*\d)),用于正则表达式“传递”。

答案 1 :(得分:3)

为什么不呢:

if (re.search(r"[a-z]", input) and re.search(r"[A-Z]", input) and re.search(r"[0-9]", input)):
    # pass
else
    # don't pass