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

如何在Python的re.finditer方法中提取span属性?

提取re.finditer匹配结果的span值问题

问题场景

使用re.finditer获取匹配结果后,尝试提取每个匹配的span范围时,直接使用i.span得到的是函数对象列表:

[i.span for i in results]
# 输出:
# [<function Match.span(group=0, /)>, ...]

而期望得到的是类似(0,10)、(12,18)这样的元组值。

原因与解决方法

span是re.Match对象的方法,不是属性。你需要调用这个方法(加上括号())才能获取到实际的span元组:

# 正确写法
[i.span() for i in results]

如果需要指定匹配组的span(默认是组0,即整个匹配),可以给span()传组号,比如i.span(1)。

结合你的函数使用示例

用你定义的convert_ftn_to_token函数,完整的提取span代码如下:

import re

def convert_ftn_to_token(seq):
    va = '[a-z]{1,}'

    ftn_lst = ['sin','cos','tan','log_', 'e ?\^'] 
    ftn_lst = [ftn + ' ?\{? ?' + va +' ?\}?' for ftn in ftn_lst]
    ftn_lst2  = [chr(i) for i in range(65,91)] + [chr(i) for i in range(97,123)]
    ftn_lst2 = [ftn + ' ?\( ?' + va + ' ?\)' for ftn in ftn_lst2]

    ftn_c = re.compile(
        '|'.join(ftn_lst2) +'|'+ 
        '|'.join(ftn_lst)
    )

    return re.finditer(ftn_c,seq)

# 测试示例
test_seq = "sin theta  cos x  e ^ x f( x )  log_ {x}"
results = convert_ftn_to_token(test_seq)
spans = [i.span() for i in results]
print(spans)
# 输出:[(0, 10), (12, 18), (20, 26), (26, 32), (37, 45)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 00:26:00