为什么,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']
我的想法有什么问题?
答案 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()也只会匹配字符串的开头而不是每行的开头。