正则表达式优化:移除账号名前置独立数字,保留含符号数字前缀
修正账户名称清理正则:仅移除独立前置数字,保留含特殊字符的数字前缀
问题分析
原正则 r'^\d{1,4}(?!\w)' 的缺陷在于,(?!\w) 会匹配数字后所有非单词字符(包括 /、- 这类合法名称前缀里的符号),导致像 40/86 Adverts Inc.- Carmel 这样的合法名称被误处理为 /86 Adverts Inc.- Carmel。我们需要的是仅移除作为独立前缀的数字(即数字后紧跟空白字符,属于缺行导致的行号类内容),保留与特殊字符绑定的数字前缀组合。
解决方案
调整正则规则,精准匹配「开头可选前置空格 + 1-4位数字 + 紧跟空白字符」的模式,只移除这类独立数字前缀:
代码实现
import re def clean_account_name(account): # 匹配开头的可选空格、1-4位数字,且数字后紧跟空白,替换为空后去除首尾空格 cleaned = re.sub(r'^\s*\d{1,4}(?=\s)', '', account) return cleaned.strip()
正则说明
^\s*:匹配开头的任意数量空白字符(处理PDF提取时的前置空格)\d{1,4}:匹配1-4位数字(对应原需求的数字范围)(?=\s):正向预查,确保数字后紧跟空白字符(确认这是独立的数字前缀,而非名称的一部分)
测试验证
| 原始账户名称 | 清理后结果 |
|---|---|
63 Triont Advisers LLC | Triont Advisers LLC |
40/86 Adverts Inc.- Carmel | 40/86 Adverts Inc.- Carmel |
1234 Test Company | Test Company |
78-90 Business Group | 78-90 Business Group |
45 Another Name | Another Name |
内容的提问来源于stack exchange,提问作者Jess
相关产品推荐
相关产品推荐

