Python 为什么我的正则表达式不用于字符验证
这里我的Python 为什么我的正则表达式不用于字符验证,python,regex,Python,Regex,这里我的(?=.[a-z]{2})正在显式地检查2个小字符。但是我不能接受 import re char = 'Massas23#' if re.search(r"^(?=.*[\d])(?=.*[A-Z])(?=.*[a-z]{2})(?=.*[@#$])[\w\d@#$]{6,12}$", char): print ("match") else: print ("Not Match") 我的输出是匹配,预期是不匹配可能 ^(?!.*[a-z]{3})(?=.*[\d])(?
(?=.[a-z]{2})
正在显式地检查2个小字符。但是我不能接受
import re
char = 'Massas23#'
if re.search(r"^(?=.*[\d])(?=.*[A-Z])(?=.*[a-z]{2})(?=.*[@#$])[\w\d@#$]{6,12}$", char):
print ("match")
else:
print ("Not Match")
我的输出是匹配
,预期是不匹配
可能
^(?!.*[a-z]{3})(?=.*[\d])(?=.*[A-Z])(?=.*[a-z]{2})(?=.*[@#$])[\w\d@#$]{6,12}$
那就行了
(?!.*[a-z]{3})
表示不允许超过三个连续的小写字母
试验
如果您希望简化/修改/探索表达式,将在的右上面板中进行解释。如果您愿意,还可以在中查看它与一些示例输入的匹配情况
正则表达式电路 可视化正则表达式:
我想我们不是在试图匹配
23
,如果你想匹配的话
^(?!.*[a-z]{3})(?=.*[\d])(?=.*[A-Z])(?=.*[a-z]{1,2})(?=.*[@#$])[\w\d@#$]{6,12}$
我会那样做的
您可以从character类中省略小写字符,然后精确匹配2个小写字符a-z 例如,可以使用求反字符类来匹配非数字
^(?=.{6,12}$)(?=[^\d\s]*\d)(?=[^A-Z\s]*[A-Z])(?=[^@#$\s]*[@#$])[A-Z0-9_@#$]*[a-z][A-Z0-9_@#$]*[a-z][A-Z0-9_@#$]*$
字符串的开头^
断言6-12个字符(?=.{6,12}$)
断言一个数字(?=[^\d\s]*\d)
断言大写字符(?=[^A-Z\s]*[A-Z])
断言一个特殊字符(?=[^@#$\s]*[@#$])
匹配2个小写字母A-z[A-Z0-9#$]*[A-z][A-Z0-9#$]*[A-z][A-Z0-9#$]*[A-z][A-Z0-9#$]*
字符串结尾$
不必在方括号内[\d]
[\w\d@#$]
还与\w
匹配,因此可以从字符类中省略\d
(?!.[a-z]{3})
它不匹配MAsSa23
,我认为它应该显式2个小案例
^(?=.{6,12}$)(?=[^\d\s]*\d)(?=[^A-Z\s]*[A-Z])(?=[^@#$\s]*[@#$])[A-Z0-9_@#$]*[a-z][A-Z0-9_@#$]*[a-z][A-Z0-9_@#$]*$