如何使用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
相关产品推荐
相关产品推荐

