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

Python实现单次遍历字符串提取指定子串及其位置的优化方案

优化正则匹配括号的单次遍历实现

你可以通过合并正则匹配模式,实现单次遍历字符串就提取所有目标括号的位置,并完成¬[→[、¬(→(的转换,无需多次遍历和中间变量。

优化后的代码

import re

expression = "¬[P∧¬(¬T∧R)]∧(T→¬P)"
# 匹配所有目标模式:¬[、[、¬(、(、)、]
pattern = re.compile(r"¬\[|\[|¬\(|\(|\)|\]")

all_matches = []
for match in pattern.finditer(expression):
    start_pos = match.start()
    # 处理转换逻辑:¬[换成[,¬(换成(,其余直接取匹配字符
    matched_str = match.group()
    if matched_str == "¬[":
        all_matches.append([start_pos, "["])
    elif matched_str == "¬(":
        all_matches.append([start_pos, "("])
    else:
        all_matches.append([start_pos, matched_str])

print(all_matches)  # 输出:[[0, '['], [4, '('], [13, '('], [10, ')'], [18, ')'], [11, ']']]

思路说明

  • 用一个正则表达式r"¬\[|\[|¬\(|\(|\)|\]"覆盖所有需要匹配的子串,确保单次遍历就能捕获所有目标内容
  • 遍历匹配结果时,根据匹配到的字符串判断是否需要转换,直接生成最终需要的列表项
  • 最终结果和原代码输出完全一致,但只需要遍历字符串一次,也省去了多个中间变量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 00:02:08