>>> import re
>>> s = 'this is a test'
>>> reg1 = re.compile('test$')
>>> match1 = reg1.match(s)
>>> print match1
None
在Kiki中的与s结束时的测试相匹配。我错过了什么? (我也试过re.compile(r'test$')
)
答案 0 :(得分:23)
使用
match1 = reg1.search(s)
代替。仅{+ 1}}函数 匹配字符串的开头...请参阅文档here:
Python提供了两种基于正则表达式的不同原语操作:
match
仅在字符串的开头检查匹配,而re.match()
检查字符串中任何位置的匹配(这就是Perl默认情况下)。
答案 1 :(得分:1)
您的正则表达式匹配完整字符串。您可以使用搜索代替无提及,或者您可以更改正则表达式以匹配完整字符串:
'^this is a test$'
或者稍微难以阅读但有些不那么无用:
'^t[^t]*test$'
这取决于你想要做什么。
答案 2 :(得分:0)
这是因为,match
方法无法找到预期的模式就返回None
,如果找到期望的模式,它将返回类型为_sre.SRE_match
的对象。
因此,如果要从True
获得布尔值(False
或match
),则必须检查结果是否为None
!
您可以检查文本是否匹配:
string_to_evaluate = "Your text that needs to be examined"
expected_pattern = "pattern"
if re.match(expected_pattern, string_to_evaluate) is not None:
print("The text is as you expected!")
else:
print("The text is not as you expected!")