Python正则表达式匹配多行文本:跳过$开头行提取INCLUDE路径
解决多行BDF文件中提取未注释INCLUDE路径的问题
针对你在处理BDF文件时需要提取未被$注释的INCLUDE路径的需求,我整理了一套适配多行文本的正则方案,完美匹配你的预期结果。
核心需求回顾
我们需要:
- 跳过以
$开头的整行注释 - 忽略行内
$之后的所有内容(包括其中的INCLUDE语句) - 仅捕获有效
INCLUDE语句中的文件路径
正则表达式与实现代码
这里提供的正则结合Python的re模块,可以直接处理多行文本:
import re # 定义匹配规则 pattern = r'^(?!\$).*?INCLUDE\s+\'([^\']+)\'(?=(?:.*?\$)|$)' # 读取文件内容 bdf_name = "your_target_file.bdf" # 替换为你的实际文件名 with open(bdf_name, 'r') as f: file_content = f.read() # 读取整个文件为字符串,支持多行匹配 # 提取所有有效路径 raw_matches = re.findall(pattern, file_content, flags=re.MULTILINE) # 清理路径中的冗余空格(适配示例中带空格的路径) cleaned_paths = [path.strip().replace('\\ ', '\\') for path in raw_matches] # 输出结果 print(cleaned_paths)
正则规则详解
逐段拆解这个正则的作用:
^(?!\$):负向预查,确保当前行的开头不是$,直接跳过整行注释.*?INCLUDE\s+\':非贪婪匹配行内$之前的内容,定位到INCLUDE关键字和后续的单引号([^\']+):捕获单引号之间的所有内容(即文件路径),直到遇到闭合单引号为止(?=(?:.*?\$)|$):正向预查,保证我们匹配的INCLUDE语句要么在$注释符号之前,要么位于行尾(无注释的情况)re.MULTILINE:让^和$匹配每一行的首尾,而非整个字符串的首尾
测试验证
用你提供的示例文本测试:
INCLUDE '.\..\..\ FE_10-28\ ASSY.bdf' INCLUDE '.\..\..\FE_10-28\standalone\COORD.bdf' $ INCLUDE '.\..\..\FE_10-28\standalone\bracket.bdf' $ INCLUDE '.\..\..\ $ FE_10-28\standalone\ $ ITFC.bdf' $ INCLUDE 'commented_out.bdf' INCLUDE 'valid_path.bdf'
运行代码后会输出:
['.\\..\\..\\FE_10-28\\ASSY.bdf', '.\\..\\..\\FE_10-28\\standalone\\COORD.bdf', 'valid_path.bdf']
完全符合你的预期,同时还能处理更多场景的注释行。
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

