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

Python正则re.Match对象调用split报AttributeError解决方法

报错成因
  • 核心错误是对非字符串类型的对象调用了仅字符串支持的split()方法:re.finditer()返回的是正则匹配结果的可迭代对象,遍历得到的每个元素是re.Match类型的匹配结果对象,本身不具备字符串的split方法。
  • 代码存在变量书写错误:循环内误将存储所有匹配结果的迭代器matches当成了匹配到的文本内容调用方法,就算修改为match.split()依然会触发相同的属性错误。
  • 原有正则存在兼容缺陷:只能匹配编号和日期直接相邻的基础邮件格式,无法适配中间夹带Line xx Seq x扩展信息的新格式邮件。
修复方案
  1. 调整正则表达式,使用捕获分组直接提取目标字段,跳过中间无关内容,同时兼容两类邮件格式:
    正则规则为 r'([a-zA-Z]+[0-9]+).*?([0-9]{1,2}/[0-9]{1,2}/[0-9]{2,4})'
    • 第一个分组([a-zA-Z]+[0-9]+):匹配字母开头+数字组成的标识编号
    • 中间段.*?:非贪婪匹配编号和日期之间的任意内容,既兼容无额外内容的基础格式,也能适配夹了扩展信息的新格式
    • 第二个分组([0-9]{1,2}/[0-9]{1,2}/[0-9]{2,4}):匹配月/日/年格式的日期
  2. 调用match.group(序号)方法获取分组捕获到的字符串内容,不要直接对Match对象使用字符串方法。
  3. 按要求拼接为编号, 日期的格式,最终写入CSV文件即可。

修复后完整代码

import re
import csv

# 替换为实际传入的邮件正文参数
# body = 你的邮件正文内容

# 开启多行匹配模式,兼容两类邮件格式
pattern = re.compile(r'([a-zA-Z]+[0-9]+).*?([0-9]{1,2}/[0-9]{1,2}/[0-9]{2,4})', re.MULTILINE)
result = []

for match in pattern.finditer(body):
    # 提取两个捕获分组的内容
    track_id = match.group(1)
    date_str = match.group(2)
    result.append([track_id, date_str])

# 导出为CSV文件
with open('mail_record.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f)
    # 需要表头可放开下一行注释
    # writer.writerow(['标识编号', '对应日期'])
    writer.writerows(result)

输出效果

两类邮件内容扫描后,都会输出符合预期的格式:

PUU128377, 5/22/2023
PUN102938, 11/1/2024
PUU012938, 10/01/2025

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 01:03:36