You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python正则表达式提取邮箱ID后到下一个Message ID前的文本

问题排查与解决方案

原有正则失效原因

  1. 默认状态下正则的.元字符不匹配换行符,如果你的聊天内容包含换行,.*会直接提前终止匹配
  2. 你用的.*是贪婪匹配模式,会尽可能向后匹配最长的符合规则的内容,直接把中间多条记录全部吞掉
  3. 没有适配最后一条记录后面没有Message ID的场景
  4. 没有提前过滤末尾***后的免责无效内容

具体实现代码

import re

# 第一步:先截断***之后的所有无效免责内容
cleaned_sample = sample_string.split('***', 1)[0]

# 第二步:正则匹配目标内容,开启DOTALL让.支持匹配换行,非贪婪匹配到下一个Message ID或字符串末尾
match_list = re.findall(
    r'\S+@\S+\s+(.*?)(?=\s*Message ID|\Z)',
    cleaned_sample,
    flags=re.DOTALL
)

# 可选:清洗结果,去除空值和首尾空白
result = [item.strip() for item in match_list if item.strip()]

正则规则说明

  • \S+@\S+:保持原有逻辑匹配邮箱地址
  • \s+:匹配邮箱后的所有空白字符
  • .*?:非贪婪匹配任意字符,开启re.DOTALL后支持匹配换行符
  • (?=\s*Message ID|\Z):正向零宽预查,匹配到下一个Message ID之前停止,或者匹配到整个字符串末尾(适配最后一条记录没有后续Message ID的场景)

内容的提问来源于stack exchange,提问作者newbie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 08:06:03