如何获取字符串中多个子串的索引?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
相关产品推荐
相关产品推荐

