如何修改Python Gmail解析正则 从邮件正文提取股票期权符号
调整后代码实现
import re import email from email.policy import default def parse_symbols_from_email_to_list(email_msg): # 主题触发逻辑保持不变 if email_msg['Subject'].find("Following list of symbols were added") == -1: return [] # 提取邮件纯文本正文,跳过附件和HTML格式内容 email_body = "" if email_msg.is_multipart(): for part in email_msg.walk(): content_type = part.get_content_type() content_disposition = str(part.get("Content-Disposition")) if content_type == "text/plain" and "attachment" not in content_disposition: email_body = part.get_payload(decode=True).decode() break else: email_body = email_msg.get_payload(decode=True).decode() # 正则复用原有规则,默认不开启DOTALL模式下.不会匹配换行符,匹配到行尾自动停止 symbols_list = re.findall(r'\.[A-Z]+[A-Z0-9]+\.*[0-9]+', email_body) # 原有去重逻辑保留,自动过滤重复行提取的相同符号 symbols_list = list(dict.fromkeys(symbols_list)) return symbols_list
改动说明
- 新增邮件纯文本正文提取逻辑,适配Gmail多部分邮件结构,避免解析到无关的HTML标签或附件内容
- 原有正则匹配规则完全保留,利用re库默认不开启DOTALL模式的特性,
.不会匹配换行符,自然实现匹配到行尾即停止的效果,不会跨行合并重复行的内容 - 原有基于插入顺序的去重逻辑不变,可直接过滤两行重复内容提取到的重复符号
内容的提问来源于stack exchange,提问作者R M
相关产品推荐
相关产品推荐

