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
相关产品推荐
相关产品推荐

