如何使用Python正则表达式提取邮箱ID后到下一个Message ID前的文本
问题排查与解决方案
原有正则失效原因
- 默认状态下正则的
.元字符不匹配换行符,如果你的聊天内容包含换行,.*会直接提前终止匹配 - 你用的
.*是贪婪匹配模式,会尽可能向后匹配最长的符合规则的内容,直接把中间多条记录全部吞掉 - 没有适配最后一条记录后面没有
Message ID的场景 - 没有提前过滤末尾
***后的免责无效内容
具体实现代码
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
相关产品推荐
相关产品推荐

