为什么re.match(...)== True print False?

时间:2018-05-28 17:31:06

标签: python regex python-3.x

import re
print(re.match(r'[a-zA-Z0-9]{6,}', '4fdg5Fj3') == True)

它正在打印False但是给出的字符串是满足正则表达式的所有条件。

1 个答案:

答案 0 :(得分:4)

None可以返回的两种类型的对象,匹配对象和re.match()都不等于True:

>>> importe re
>>> None == True
False
>>> re.match(r'[a-zA-Z0-9]{6,}', '4fdg5Fj3')
<_sre.SRE_Match object; span=(0, 8), match='4fdg5Fj3'>
>>> re.match(r'[a-zA-Z0-9]{6,}', '4fdg5Fj3') == True
False

请勿使用== True。如果您需要查看匹配是否成功,请测试is not None

>>> re.match(r'[a-zA-Z0-9]{6,}', '4fdg5Fj3') is not None
True
>>> re.match(r'No such pattern', 'will not match') is not None
False

您几乎永远不会使用== True== False。在像if语句这样的布尔上下文中,只需删除== True;测试布尔真值是声明的工作。对于== False,请将not放在前面。此外,如上所述,大多数对象不等于TrueFalse;要测试truth value,只需传入对象本身,或使用bool()函数将真值转换为布尔值。