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

如何在不修改原字符串的情况下,获取排除匹配内容长度影响的正则匹配起始位置?

解决方案

核心逻辑是:每次计算匹配位置时,减去之前所有匹配内容的总长度——相当于把这些需要忽略的匹配内容“虚拟移除”,而不需要修改原字符串本身。

具体实现步骤:

  • 用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 09:27:43