使用Python与正则表达式高效提取Excel中的票号数据

使用Python与正则表达式高效提取Excel中的票号数据

一、需求

本文将介绍如何利用Python的Pandas库和正则表达式,快速实现票号这一数据清洗任务,并将结果整理为规范的表格结构。

在数据处理场景中,从非结构化文本里提取特定格式的信息是常见需求。例如在物流工单、票务系统的Excel记录中,我们经常需要从冗长的摘要文本里提取出票号(如快递单号、订单号等)。

二、核心代码解析

我们通过一段实际代码来演示整个处理流程,代码逻辑分为数据读取正则匹配结果整理三个核心步骤。

1. 导入依赖库

python 复制代码
import pandas as pd
import re
  • pandas:用于Excel文件的读写和数据处理
  • re:正则表达式模块,用于文本模式匹配

2. 读取原始数据

python 复制代码
df = pd.read_excel('报销.xlsx')
  • 使用pd.read_excel读取原始Excel文件,假设数据存储在默认的第一个工作表
  • 原始数据结构:假设第一列为包含票号的摘要文本(如"处理票号1234567890的问题")

3. 预编译正则表达式

python 复制代码
ticket_pattern = re.compile(r'\b\d{8,30}\b')
  • 模式解析
    • \b:单词边界,确保匹配独立数字串
    • \d{8,30}:匹配8到30位的连续数字(可根据实际票号长度调整)
  • 预编译优势:避免重复编译正则表达式,提升匹配性能

4. 遍历文本并提取票号

python 复制代码
result_data = []
for text in df.iloc[:, 0].astype(str):
    tickets = ticket_pattern.findall(text)
    if tickets:
        # 处理第一条记录(包含摘要和首个票号)
        result_data.append({'摘要': text, '票号': tickets[0]})
        # 处理剩余票号(摘要留空)
        result_data.extend({'摘要': '', '票号': ticket} for ticket in tickets[1:])
    else:
        # 无票号时保留摘要
        result_data.append({'摘要': text, '票号': ''})
  • 关键逻辑
    • df.iloc[:, 0]:选取第一列数据(假设票号在第一列)
    • astype(str):确保所有数据转为字符串类型,避免类型错误
    • findall方法:返回所有匹配的票号列表
    • 数据结构设计
      • 首个票号保留对应的摘要文本
      • 后续票号共享同一摘要(摘要留空以节省空间)
      • 无票号记录保留原始摘要,票号字段为空

5. 保存结果到Excel

python 复制代码
pd.DataFrame(result_data).to_excel('output4.xlsx', index=False)
  • 将结果列表转换为DataFrame并保存为新Excel文件
  • index=False参数:禁止生成默认行索引列

三、技术关键点

1. 正则表达式优化技巧

  • 动态调整匹配模式 :若票号包含字母(如"YT123456"),可修改模式为:

    python 复制代码
    r'\b[A-Za-z0-9]{8,30}\b'  # 匹配字母数字混合字符串
  • 边界控制 :使用\b避免匹配长数字串中的子串(如从"123456789012"中提取完整票号,而非截断部分)

2. Pandas数据处理技巧

  • 向量化操作 :虽然本例使用循环遍历,对于大规模数据可尝试向量化处理(如df[0].apply())以提升速度
  • 数据类型管理 :通过astype(str)统一处理可能的数值型、日期型数据,避免正则匹配错误

3. 多票号处理逻辑

  • 当单条摘要包含多个票号时(如"涉及票号123456和789012"),代码会将首个票号与摘要关联,后续票号以"摘要为空+独立票号"的形式展示,便于后续数据统计。

需要源码的,加同名ggh,进行获取

相关推荐
小玺玺22 分钟前
[RDK X5] MJPG编解码开发实战:从官方API到OpenWanderary库的C++/Python实现
c++·python·opencv·rdk x5
zhuiQiuMX40 分钟前
力扣LFU460
python·leetcode
noravinsc1 小时前
django 获取当前时间 格式 YYYY-MM-DD HH:Mm:ss
python·django·sqlite
谢李由202303220811 小时前
网络爬虫学习心得
爬虫·python
爱意随风起风止意难平1 小时前
AIGC 基础篇 Python基础 05 元组,集合与字典
开发语言·python·aigc
栗子不爱栗子1 小时前
从理解AI到驾驭文字:一位技术爱好者的写作工具探索手记
python·学习·ai
飞翔的佩奇3 小时前
【完整源码+数据集+部署教程】石材实例分割系统源码和数据集:改进yolo11-CA-HSFPN
python·yolo·计算机视觉·毕业设计·数据集·yolo11·石材实例分割系统
鹏说大数据3 小时前
使用Conda管理服务器多版本Python环境的完整指南
服务器·python·conda
武汉格发Gofartlic4 小时前
FEMFAT许可使用数据分析工具介绍
python·信息可视化·数据分析
love530love4 小时前
【笔记】NVIDIA AI Workbench 中安装 cuDNN 9.10.2
linux·人工智能·windows·笔记·python·深度学习