Python 解析;“发送”;在电子邮件中排队
我有一个约150封电子邮件的文件夹,全部保存为HTML文件(Firefox扩展名),我需要记录“发送”行上的年份;如下图所示 我尝试使用正则表达式,但失败了;它根本不会打印任何结果,向我表明我的正则表达式不起作用。我尝试使用Python 解析;“发送”;在电子邮件中排队,python,regex,email,beautifulsoup,Python,Regex,Email,Beautifulsoup,我有一个约150封电子邮件的文件夹,全部保存为HTML文件(Firefox扩展名),我需要记录“发送”行上的年份;如下图所示 我尝试使用正则表达式,但失败了;它根本不会打印任何结果,向我表明我的正则表达式不起作用。我尝试使用email模块中的get\u payload()和message\u from\u string()命令,但由于这是一个HTML文档,因此失败了。然后,我尝试使用BeautifulSoup捕获整个电子邮件,然后只解析“已发送”行,但由于未知原因,我失败了。我不是这些模块的专
email
模块中的get\u payload()
和message\u from\u 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'
或-要解释已发送的出现在行首的事实,请执行以下操作:
r'(?m)^Sent:.*?\b(\d{4})\b'
详细信息:
(?m)^
-行的开始
已发送:
-文字字符序列
*?
-除换行符以外的任何0+字符,尽可能少
\b(\d{4})\b
-一个由4位数字组成的完整单词(捕获到组1中,因此作为re.findall
的结果返回)
使用r'Sent:.*\b(\d{4})\b'
我认为这取决于电子邮件的HTML格式。。。另外,您是否有办法获取原始电子邮件数据?解析可能会更容易,因为你只需要找到发送的标题…@WiktorStribiżew,它工作得很好,非常感谢。我真的认为我的正则表达式技能已经提高了,这次我会自己去做的,但从你的文章中我可以看出我做得很好off@mgilson这实际上也是我的思考过程,获取原始数据,但我真的很难成功地做到这一点,所以我想在这里问一个问题。不过谢谢,另一个人的正则表达式帮我解决了这个问题