re.match vs re.findall

时间:2014-06-04 15:36:05

标签: python regex

为什么,re.match返回None对象,而类似的re.findall返回非空结果?

我正在解析电子邮件主题。有问题的是

subject = "=?UTF-8?B?0JLQsNGI0LUg0YHQvtC+0LHRidC10L3QuNC1INC90LUg0LTQvtGB0YLQsNCy0LvQtdC90L4=?=. Mail failure."

我想知道为什么

re.match("mail failure", subject, re.I)返回对应的无对象

re.findall("mail failure", subject, re.I)返回列表['Mail failure']

中的匹配字符串

我的想法有什么问题?

2 个答案:

答案 0 :(得分:8)

re.match匹配字符串开头的模式。 re.findall搜索以查找字符串中任何位置的模式。

如果你有模式"mail failure"和字符串:

subject = "=?UTF-8?B?0JLQsNGI0LUg0YHQvtC+0LHRidC10L3QuNC1INC90LUg0LTQvtGB0YLQsNCy0LvQtdC90L4=?=. Mail failure."

re.match将返回None,因为该字符串不以"mail failure"开头。 re.findall虽然会返回一个匹配项,因为该字符串包含"mail failure"

答案 1 :(得分:3)

这就在文档中:https://docs.python.org/2/library/re.html 你想要的是re.search

  

请注意,即使在MULTILINE模式下,re.match()也只会匹配字符串的开头而不是每行的开头。