如何在不修改原字符串的情况下,获取排除匹配内容长度影响的正则匹配起始位置?
解决方案
核心逻辑是:每次计算匹配位置时,减去之前所有匹配内容的总长度——相当于把这些需要忽略的匹配内容“虚拟移除”,而不需要修改原字符串本身。
具体实现步骤:
- 用
re.finditer遍历所有匹配结果 - 维护一个变量累计已处理匹配内容的总长度
- 对每个匹配项,用其原始起始位置减去累计长度,得到调整后的目标位置
- 将当前匹配项的长度加到累计变量中,供后续匹配计算使用
代码示例:
import re exampleString = "abcauehafj['hello']jfa['hello']jasfjgafadsf" regex = r"\['hello'\]" matches = re.finditer(regex, exampleString) start_pos = [] total_removed = 0 for match in matches: # 计算调整后的位置:原始起始位减去已累计的匹配内容长度 adjusted_pos = match.start() - total_removed start_pos.append(adjusted_pos) # 累加当前匹配内容的长度 total_removed += len(match.group()) print(start_pos) # 输出结果:[10, 13]
细节说明
第一个匹配的原始起始位置是10,此时无需要扣除的长度,调整后仍为10;该匹配内容长度为9,累计扣除长度更新为9。
第二个匹配的原始起始位置是22,减去累计的9后得到22-9=13,完全符合目标要求。
内容的提问来源于stack exchange,提问作者Bob McBobson
相关产品推荐
相关产品推荐

