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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:20:18