Python正则查找字符串所有13位数字仅返回首个结果的解决方法
Python正则提取13位数字仅返回首个结果的排查修复
问题原因
- 所用正则
^(?:.*?(\d{10,13}).*|.*)$携带行首^、行尾$锚点,逻辑为整行单次匹配,仅能捕获到整段文本里第一个符合长度规则的数字,无法遍历提取所有匹配项。 - 正则规则写为
\d{10,13},会误捕获长度为10-12位的数字串,不符合提取纯13位数字的需求。 - 正则中包裹的
.*通配符会吞掉其余符合规则的数字段,导致后续匹配项无法被捕获。
修复方法
替换原有re.findall行的正则规则,移除整行锚点和冗余通配符,直接全局扫描匹配13位连续数字即可:
# 精准匹配所有独立的13位数字串 my_pattern_list = re.findall(r"\b\d{13}\b", my_pattern)
规则说明:
\b为单词边界,避免从长度超过13位的连续数字中截断出13位片段造成误匹配\d{13}严格匹配连续13个数字re.findall会扫描整个目标字符串,返回所有符合规则的匹配结果列表
效果验证
使用提供的样本文本运行修复后的代码,返回结果如下,已覆盖全部13位数字:
['9311105005816', '4711414284189', '9312566048022', '9312324001115', '8711167004368']
内容的提问来源于stack exchange,提问作者delsa_gh
相关产品推荐
相关产品推荐

