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
相关产品推荐
相关产品推荐

