我有一个约150封电子邮件的文件夹,全部保存为HTML文件(Firefox扩展名),我需要捕获始终在“已发送”行中找到的年份;如下图所示。
我尝试使用RegEx,但失败了;它根本不会打印任何结果,向我表明我的RegEx无法正常工作。我尝试使用get_payload()
模块中的message_from_string()
和email
命令,但因为它是一个失败的HTML文档。然后,我尝试使用BeautifulSoup捕获整个电子邮件,然后解析“已发送”行,但由于原因不明,我失败了。我不是任何这些模块的专家,所以我们将不胜感激。
我尝试过的相关代码:
for filename in os.listdir(path):
file_path = os.path.join(path, filename)
if os.path.isfile(file_path):
html_ = open(file_path, 'r').read()
soup_ = BeautifulSoup(html, 'lxml')
pattern = re.compile(r'Sent:/s([/d]{4})')
txt = html.read()
dates = pattern.findall(txt)
if "Sent" in line:
print("Date:", ''.join(dates))
答案 0 :(得分:2)
你的正则表达式(我认为斜杠只是一个拼写错误)与Sent:
和年份之间的角色并不完全匹配。您可以将正则表达式修复为
r'Sent:.*?\b(\d{4})\b'
或者 - 考虑到Sent
出现在一行开头的事实:
r'(?m)^Sent:.*?\b(\d{4})\b'
<强>详情:
(?m)^
- 开始行Sent:
- 文字字符序列.*?
- 除了换行符之外的任何0 +字符,尽可能少\b(\d{4})\b
- 由4位数组成的整个单词(捕获到第1组,因此作为re.findall
的结果返回。)