如何使用Python正则表达式提取邮件正文并移除转发头及主题行内容
解决思路
- 核心问题:原正则仅匹配到
Subject:标识就停止,未覆盖该行剩余的主题内容及行尾换行符,因此主题内容会保留在截断后的输出里。 - 修正方案:调整正则匹配范围,匹配到
Subject:后继续匹配该行所有字符直到行尾,可额外匹配行尾后的空白换行,直接定位到正文起始位置。
具体实现
修正后完整代码
import re tmp_text = """---------------------- Forwarded by Phillip K Allen/HOU/ECT on 03/21/2000 01:24 PM --------------------------- Stephane Brodeur 03/16/2000 07:06 AM To: Phillip K Allen/HOU/ECT@ECT cc: Subject: Maps As requested by John, here's the map and the forecast... Call me if you have any questions (403) 974-6756. """ # 修正后的正则,匹配到Subject行末尾再截断 match_obj = re.search(r'---.*?Subject:.*?\s*\n', tmp_text, re.DOTALL) if match_obj: # 直接取匹配结束位置之后的内容,strip()清理前置空行 content = tmp_text[match_obj.end():].strip() print(content)
输出结果
As requested by John, here's the map and the forecast... Call me if you have any questions (403) 974-6756.
正则规则说明
---.*?:非贪婪匹配从转发分割线开头到Subject:标识前的所有内容,覆盖发件人、时间、收件人、抄送等所有转发头字段Subject:.*?\s*\n:匹配Subject:开头的整行内容,直到该行结束的换行符,同时吃掉行后多余的空白空行,把整行主题直接纳入待移除范围re.DOTALL:保证.可以匹配换行符,兼容转发头跨多行的场景
内容的提问来源于stack exchange,提问作者Asad Kamal
相关产品推荐
相关产品推荐

