为何执行re.match(...) == True会打印出False结果?
问题原因分析
你遇到的问题核心在于对re.match()返回值的理解偏差:
- 当正则匹配成功时,
re.match()返回的是一个Match对象(包含匹配的细节信息),而不是布尔值True; - 只有当匹配失败时,它才会返回
None。
所以你直接用== True去比较Match对象,结果自然是False——因为Match对象和布尔值True是完全不同的类型,不会相等。
解决方案
根据你的需求,有几种正确的写法:
方式1:判断匹配结果是否存在(推荐)
直接利用Match对象在布尔上下文中为True、None为False的特性:
import re # 方式1:用bool()转换为布尔值 print(bool(re.match(r'[a-zA-Z0-9]{6,}', '4fdg5Fj3'))) # 方式2:直接判断是否不为None print(re.match(r'[a-zA-Z0-9]{6,}', '4fdg5Fj3') is not None)
方式2:严格匹配整个字符串(如果需要)
如果你需要确保整个字符串都符合正则规则(而不仅仅是开头部分),应该使用re.fullmatch(),它会验证字符串从开头到结尾完全匹配:
import re print(re.fullmatch(r'[a-zA-Z0-9]{6,}', '4fdg5Fj3') is not None)
运行以上代码,都会输出True,符合你的预期。
内容的提问来源于stack exchange,提问作者vipin yadav
相关产品推荐
相关产品推荐

