Skip to main content
 首页 » 编程设计

python之为什么我的正则表达式不能用于字符验证

2025年05月04日31xxx_UU

我的 (?=.*[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}) 

表示不允许三个以上的连续小写。

Demo 1

测试

import re 
 
char = 'Massas23#' 
 
if re.search(r"^(?!.*[a-z]{3})(?=.*[\d])(?=.*[A-Z])(?=.*[a-z]{2})(?=.*[@#$])[\w\d@#$]{6,12}$", char): 
    print("match") 
else: 
    print("Not Match") 

如果您想简化/修改/探索表达式,在regex101.com 的右上面板中已对此进行了解释.如果你愿意,也可以在this link观看。 ,它将如何与一些样本输入相匹配。


正则表达式电路

jex.im可视化正则表达式:


我想我们并没有试图匹配 MAsSa23#,如果你想匹配它,

^(?!.*[a-z]{3})(?=.*[\d])(?=.*[A-Z])(?=.*[a-z]{1,2})(?=.*[@#$])[\w\d@#$]{6,12}$ 

会那样做。

Demo 2