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

如何利用Python re模块获取字符串中所有相同单词的Span ID?

获取正则匹配中所有目标的Span ID

哦,这个问题我太熟悉了!re.search()的设计就是只返回第一个匹配到的结果,所以你只能拿到第一个"Jhon"的位置信息。想要获取所有匹配项的Span ID,咱们可以用下面这个最直接的方法:

使用re.finditer()遍历所有匹配

re.finditer()会返回一个迭代器,其中每个元素都是一个匹配对象(和re.search()返回的类型完全一致),我们只需要遍历这个迭代器,就能逐个取出每个匹配的Span信息了。

示例代码:

import re

string2 = "Jhon is a good boy,Jhon is brilliant,Jhon is a data scientist,Jhon is Jhon"
# 获取所有匹配的迭代器
match_iter = re.finditer("Jhon", string2)
# 遍历每个匹配对象,顺便给匹配项加个序号
for idx, match in enumerate(match_iter, 1):
    print(f"第{idx}个匹配: 内容='{match.group()}', Span ID={match.span()}")

执行这段代码后,你会得到所有"Jhon"的位置:

第1个匹配: 内容='Jhon', Span ID=(0, 4)
第2个匹配: 内容='Jhon', Span ID=(18, 22)
第3个匹配: 内容='Jhon', Span ID=(36, 40)
第4个匹配: 内容='Jhon', Span ID=(57, 61)
第5个匹配: 内容='Jhon', Span ID=(65, 69)

补充说明

  • 为什么不用re.findall()?因为re.findall()只会返回所有匹配的字符串内容,没法直接拿到Span位置信息,所以如果需要位置,re.finditer()是更合适的选择。
  • 正则匹配默认是非重叠匹配的,也就是说如果有像"JhonJhon"这样的字符串,它只会匹配两个独立的"Jhon"(如果你的正则是"Jhon"的话),不会出现重叠的匹配结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:45:30