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

如何获取字符串中多个子串的索引?re.finditer无法传入多个参数

匹配多个子串的索引解决方案

可以通过**正则表达式的或运算符(|)**将多个子串组合成一个匹配模式,这样re.finditer()就能一次性匹配所有目标子串,同时获取它们的索引信息。具体实现如下:

1. 构建正则匹配模式

将子串列表用|拼接成正则表达式,让正则引擎匹配列表中的任意一个子串。如果子串包含正则特殊字符(如., *, +等),需要先用re.escape()转义,避免解析错误。

2. 遍历匹配结果

用re.finditer()遍历所有匹配项,通过match.start()和match.end()获取子串的起始、结束索引,match.group()获取匹配到的子串内容。

完整代码示例

import re

sub = ['ABC', 'VC', 'KI']
s = 'ABDDDABCTYYYYVCIIII'

# 构建模式,若子串含正则特殊字符,替换为 '|'.join(map(re.escape, sub))
pattern = '|'.join(sub)

# 遍历所有匹配项并输出信息
for match in re.finditer(pattern, s):
    print(f"匹配到子串: '{match.group()}', 起始索引: {match.start()}, 结束索引: {match.end()}")

输出结果

匹配到子串: 'ABC', 起始索引: 5, 结束索引: 8
匹配到子串: 'VC', 起始索引: 13, 结束索引: 15

补充说明

  • 正则默认优先匹配更长的子串(贪婪匹配),比如子串列表包含'A'和'ABC'时,会优先匹配'ABC';
  • re.finditer()默认采用非重叠匹配,即匹配过的位置不会重复匹配;
  • 子串'KI'在目标字符串中不存在,因此不会被匹配输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 09:00:56