正则匹配选取符合指定条件的SCHEDULE-END完整文本块求助
匹配目标SCHEDULE-END块解决方案
正则匹配规则
启用单行(DOTALL,即.可匹配换行符)+ 多行匹配模式后,使用以下正则即可直接匹配所有符合要求的完整块:^SCHEDULE\b.*?\n.*#\/.*E\s*\n\s*NOP\b.*?\nEND\b.*?$
规则拆解
^SCHEDULE\b:锚定块的起始行,\b用于避免匹配到前缀为SCHEDULE的其他无关行.*?:非贪婪匹配SCHEDULE行之后,到目标行对之前的所有块内内容,防止跨块匹配\n.*#\/.*E\s*\n\s*NOP\b:精准匹配要求的行对:前一行包含#/且以E结尾,下一行是仅含NOP(允许前后带空格/缩进)的行.*?:非贪婪匹配行对之后到END行之前的剩余块内内容\nEND\b.*?$:锚定块的结束行,闭合整个SCHEDULE-END块
批量导出实现示例(Python)
import re # 读取原始文件内容 with open("input.txt", "r", encoding="utf-8") as f: raw_content = f.read() # 编译匹配规则 match_pattern = re.compile( r'^SCHEDULE\b.*?\n.*#\/.*E\s*\n\s*NOP\b.*?\nEND\b.*?$', flags=re.DOTALL | re.MULTILINE ) # 提取所有符合条件的块 target_blocks = match_pattern.findall(raw_content) # 写入到新文件,块之间用空行分隔 with open("output.txt", "w", encoding="utf-8") as f: f.write("\n\n".join(target_blocks))
适配调整说明
- 若你的文本中SCHEDULE、END行前存在缩进,可将起始/结束锚定规则调整为
^\s*SCHEDULE\b、\n\s*END\b.*?$ - 原有的删除NOP行的正则可在导出后对目标块二次处理时直接使用
内容的提问来源于stack exchange,提问作者italo_pm
相关产品推荐
相关产品推荐

