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

如何使用Python re.finditer()获取正则捕获分组的起止索引

捕获分组索引获取方法

re返回的Match对象的start()、end()方法默认返回整个正则匹配结果的起止索引,你可以给这两个方法传入捕获分组的序号,来获取对应分组的位置信息,第一个捕获分组传入参数1即可。

修正后测试代码

import re

strng = 'move 12345-!'
matches = re.finditer(r'move ([0-9]+).*?', strng)
for each in matches:
    # 输出捕获到的数字
    print(each.group(1))
    # 输出第一个捕获分组的起始、结束索引
    print(each.start(1), each.end(1))

运行上述代码会输出数字12345和对应位置5 10,对应原字符串中数字的真实索引,已经排除了前面固定锚点move 的长度。

多行文档适配代码

针对你提供的完整文档场景,可直接用如下代码批量获取所有数字的位置:

import re

document = """move 12345-!
move 57496-!
move 96038-!
move 00528-!
"""

matches = re.finditer(r'move ([0-9]+).*?', document)
for seq, match in enumerate(matches, start=1):
    num = match.group(1)
    start = match.start(1)
    end = match.end(1)
    print(f"第{seq}个数字{num}的位置:document[{start}:{end}]")

运行后第二个数字57496的输出位置为document[17:22],和你示例的索引偏差是因为Python字符串切片为左闭右开规则,该索引可以直接用于原文档切片提取数字,无需额外调整。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 11:30:05