我有以下字符串:
spf=pass (sender IP is 198.71.245.6)
smtp.mailfrom=bounces.em.godaddy.com; domainname.com.au; dkim=pass (signature was
verified) header.d=godaddy.com;domainname.com.au; dmarc=pass action=none
header.from=godaddy.com;
使用以下代码:
if "Authentication-Results" in n:
auth_results = n['Authentication-Results']
print(auth_results)
spf = re.match(r"spf=(\w+)", auth_results)
if spf:
spf_result = spf.group(1)
dkim = re.match(r"^.*dkim=(\w+)", auth_results)
print(dkim)
if dkim:
dkim_result = dkim.group(1)
SPF始终匹配,但DKIM不匹配:
print(dkim) = None
根据在线正则表达式测试仪,它应该:https://regex101.com/r/ZkVg74/1为什么不是这样的任何想法,我也尝试过这些:
dkim = re.match(r"dkim=(\w+)", auth_results)
dkim = re.match(r"^.*dkim=(\w+)", auth_results, re.MULTILINE)
答案 0 :(得分:1)
.
默认不与换行符匹配。由于测试字符串中的dkim
位于第二行,并且您的正则表达式模式尝试使用^.*
来匹配字符串开头的所有非换行字符,因此找不到dkim
在第二行。您应该使用re.DOTALL
标志来允许.
匹配换行符:
dkim = re.match(r"^.*dkim=(\w+)", auth_results, flags=re.DOTALL)
或从字符串的开头完全删除不必要的匹配项:
dkim = re.search(r"dkim=(\w+)", auth_results)
答案 1 :(得分:0)