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

Python re.findall正则匹配结果冗余重复数字问题求助

问题原因

你得到重复数字是因为re.findall会返回所有捕获组的匹配结果。你的正则表达式里有三个捕获组:

  1. 第一个组:([ABC]{1,}) → 匹配字母部分
  2. 第二个组:(([0-9]{1,}[,.:]{0,}){1,}) → 匹配数字和符号的组合整体
  3. 第三个组:([0-9]{1,}[,.:]{0,}) → 嵌套在第二个组里的子捕获组,每次匹配一组数字+可选符号,最后一次匹配的内容(也就是最后一组数字)会被单独返回

所以findall会把这三个组的结果都放进元组里,就出现了末尾重复的数字。

解决方法

把嵌套的子捕获组改成非捕获组(用(?:...)代替(...)),这样这个组的内容不会被findall单独返回。修改后的代码如下:

import re

text = "ABC9,10.11A5:6,7:8.10BC1"
pattern = r"([ABC]{1,})((?:[0-9]{1,}[,.:]{0,}){1,})"
result = re.findall(pattern, text)
print(result)
# 输出:[('ABC', '9,10.11'), ('A', '5:6,7:8.10'), ('BC', '1')]

非捕获组(?:...)的作用是定义分组用于正则逻辑匹配,但不会提取该组的匹配结果,正好符合你的需求——只保留字母部分和对应的数字符号组合这两组结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 15:35:20