使用re.findall()从MIME-Mail获取From-Header失败

时间:2018-05-16 16:30:12

标签: python regex

我正在尝试使用re.findall()功能提取电子邮件地址。我使用for - 循环逐行读取文本文件,但输出只是一个空列表。我可以将findall()完美地用于单行,但不能逐行读取文本文件。

from re import *
fname = input('enter file name\n:')  
fhand = open(fname)
for line in fhand:
    line = line.rstrip()
    x = findall('^From (\S+@\S+)', line)
    print(x)

1 个答案:

答案 0 :(得分:0)

无需一次读取一行。您可以将findall()函数应用于整个文件。

from re import findall
fname = input('filename> ')

with open(fname,'r',encoding='utf-8') as f:
    data = f.read()

#data = ['from foobarbaz@gmail.com','From FooBar_Baz@hotmail.com.es','...']

mails = findall('(?i)from\s+\S+@\S+\.\S+(?:\.\S+)?',data)
for mail in mails: print(mail)