python - 解析电子邮件中的 "Sent"行

标签 python regex email beautifulsoup

我有一个大约 150 封电子邮件的文件夹,全部保存为 HTML 文件(Firefox 扩展),并且我需要捕获始终在“已发送”行中找到的年份;如下图所示。

enter image description here

我尝试使用 RegEx 但失败了;它根本不会打印任何结果,表明我的正则表达式不起作用。我尝试使用 email 模块中的 get_payload()message_from_string() 命令,但由于它是 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))

最佳答案

您的正则表达式(我认为斜杠只是一个拼写错误)与 Sent: 和年份之间的字符并不真正匹配。您可以将正则表达式修复为

r'Sent:.*?\b(\d{4})\b'

或者 - 考虑到 Sent 出现在行的开头:

r'(?m)^Sent:.*?\b(\d{4})\b'

详细信息:

  • (?m)^ - 行首
  • 已发送: - 文字字符序列
  • .*? - 除换行符之外的任何 0+ 个字符,尽可能少
  • \b(\d{4})\b - 由 4 位数字组成的整个单词(捕获到第 1 组中,因此作为 re.findall 的结果返回>.)

关于python - 解析电子邮件中的 "Sent"行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41836700/

相关文章:

regex - 对多个文件使用 pcregrep

c# - 正则表达式中的法语/葡萄牙语扩展 ASCII 符号

java - 从 whatsapp 获取邮件 Intent

python - 将 groupby-apply 结果分配给父数据框

python:使用元素树处理 XML 项目数组,最好是 "merge"

python - 决策边界逻辑回归不正确

python - 在 Python 中连接字符串的最有效方法

regex - 从字符串中解析出 ISIN

python - 使用 Python 发送 HTML 电子邮件

node.js - Nodemailer SES API 与 SMTP