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


问题内容

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

它应该具有1个数字1个大写字母和一个小写字母,而不是按特定顺序排列。所以我虽然这样:

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

但是我不知道如何告诉他以任何顺序进行搜索。我尝试在网上浏览,但是没有找到有趣的东西,谢谢您的帮助。


问题答案:

您可能已经尝试过寻找用于验证正则表达式的密码,该网站上有很多;)

也就是说,您可以使用积极的前瞻方式来做到这一点:

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)),以使正则表达式“通过”。