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

如何使用Pandas组合独立正则表达式并批量处理数据集行提取格式化内容

最终整合方案

核心匹配正则

按高优先级长模式在前、低优先级短模式在后的原则整合,避免短规则截断长编号的问题,完整正则为:
r"\d{2,3}-\d{3}-\d{3}\w*|\d{2}-\d{4}\w?|[A-Z][a-z]+"

分支匹配规则说明

  • 第一分支(最高优先级):匹配长编号,严格对应规则2:2-3位数字开头,通过两个连字符分隔3位数字的三段结构,允许编号后跟随单词字符作为后缀,不会截断长编号的前半段
  • 第二分支:匹配短编号,严格对应规则3:2位数字开头,连字符后接4位数字,允许末尾带1个单字符后缀,因为严格限制了数字段长度,不会误匹配长编号的片段
  • 第三分支:匹配人名,对应规则1:仅识别首字母大写、后续为小写字母的连续英文单词,避免将全小写的连接词(如and)误判为人名

Pandas 实现代码

import pandas as pd
import re

# 定义整合后的匹配规则
COMBINED_RULE = r"\d{2,3}-\d{3}-\d{3}\w*|\d{2}-\d{4}\w?|[A-Z][a-z]+"

# 基于输入列生成Wanted新列
df["Wanted"] = df["Column0"].str.findall(COMBINED_RULE).str.join(", ")

匹配效果验证

对示例测试串的输出完全符合预期:

Column0Wanted
Alice\t12-345-623/ 10-1234Alice, 12-345-623, 10-1234
Bob 201-888-697 / 12-0556aBob, 201-888-697, 12-0556a
Tim 073-110-101 / 13-1290Tim, 073-110-101, 13-1290
Joe 74-111-333/ 33-1290 and Amy(12-345-623)/10-1234cJoe, 74-111-333, 33-1290, Amy, 12-345-623, 10-1234c

之前匹配异常的原因

  • 原有代码使用re.search仅提取第一个匹配项,无法收集整行所有目标内容,需要替换为findall遍历全串匹配
  • 短编号规则设置过松:允许2-3位数字开头、后接3-4位数字,导致长编号的前两段(如12-345)被误判为短编号匹配
  • 正则分支顺序倒置:短规则排在长规则之前,被优先匹配截断了长编号内容
  • 人名匹配无边界:未限定首字母大写特征,会混入非目标的普通英文单词

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 01:15:04