Python匹配到ExecuteQuery后反向遍历行捕获首个SetSearchExpr实例如何实现
实现思路
- 缓存历史行:逐行读取文件时,把每一行内容存入一个历史列表,所有已读取的行都会按顺序留存,不需要二次读取文件
- 反向遍历匹配:每次匹配到
ExecuteQuery (时,直接倒序遍历历史列表,第一个命中SetSearchExpr(规则的行就是距离当前ExecuteQuery最近的目标行 - 结果提取输出:从匹配到的
SetSearchExpr行中提取搜索规则内容,按要求格式输出即可,找不到目标行时可自定义提示逻辑
完整实现代码
import sys import os import re # 初始化历史行缓存 history_lines = [] target_pattern = re.compile(r'SetSearchExpr\("(.*?)"\)') with open("Sample_code.txt", 'r', encoding='utf-8') as file: for line in file: # 先把当前行加入历史缓存 history_lines.append(line.strip()) if "ExecuteQuery (" in line: # 反向遍历历史行找第一个匹配的目标 search_spec = None for prev_line in reversed(history_lines): match_res = target_pattern.search(prev_line) if match_res: search_spec = match_res.group(1) break # 输出结果 if search_spec: print(f'ExecuteQuery Search Spec = "{search_spec}"') else: print("当前ExecuteQuery未匹配到对应的SetSearchExpr配置")
代码说明
- 用
with语法打开文件,自动处理文件关闭,避免资源泄露 - 历史列表会留存所有已读取的行,适配单文件内多个
ExecuteQuery (的场景,每个ExecuteQuery都会匹配自身之前最近的一个SetSearchExpr - 用正则匹配提取内容,容错率比纯字符串分割更高,格式不规范的场景下也能正常提取参数
内容的提问来源于stack exchange,提问作者ak0053792
相关产品推荐
相关产品推荐

