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

Python正则表达式re.search无法捕获全部匹配组问题

为什么re.search无法捕获所有数字组?

核心原因:重复捕获组会覆盖之前的结果

当你把捕获组(比如(\d+))放在可重复的结构里(比如你的(?:...)*非捕获组),正则引擎每次重复匹配时,都会覆盖这个捕获组之前存储的值。

以你的例子具体分析:

  • 正则(?:(\d+)(?:\.*))*先匹配467..,此时(\d+)捕获到467;
  • 接着匹配114..,(\d+)会把之前的467覆盖,换成114;
  • 最终re.search返回的Match对象里,这个捕获组只保留最后一次匹配的结果。

另外,re.search本身只返回第一个完整匹配的结果,它不会追踪同一个捕获组的多次匹配历史,只会记录每个组最终的捕获值。

解决方法:用re.finditer获取所有匹配及位置

如果你需要拿到每个数字的内容和对应的位置信息,re.finditer是最合适的选择——它会返回每一次匹配的独立Match对象,每个对象都包含该次匹配的捕获结果和位置:

import re
my_string = '467..114..'
for match in re.finditer(r'(\d+)\.*', my_string):
    print(f"捕获的数字: {match.group(1)}")
    print(f"数字的位置范围: {match.span(1)}")

运行这段代码会输出:

捕获的数字: 467
数字的位置范围: (0, 3)
捕获的数字: 114
数字的位置范围: (5, 8)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 21:27:09