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

如何从含重复嵌套模式的文本文件中提取指定内容?

推荐查阅的文档方向

1. Python re模块进阶文档

重点聚焦以下内容:

  • 捕获组与命名组:用括号精准捕获Dataset名称、目标文件名、关键数据这三类核心内容,一次性从匹配结果中提取,省去额外循环筛选的麻烦。
  • 正向预查(Lookahead):用来精准定位每个Dataset块的结束边界(下一个[Dataset]或文本末尾),避免匹配跨块的无效内容。
  • re.VERBOSE模式:允许将复杂正则拆分为多行并添加注释,大幅提升可读性,适配这种多块嵌套的文本结构。
  • re.finditer()方法:迭代返回每个匹配的Match对象,方便逐个处理每个Dataset对应的内容,比findall更灵活。

2. 第三方结构化解析库文档

如果正则编写过于复杂,推荐查看pyparsing的官方文档:
它支持自定义文本语法规则,你可以直接定义Dataset块、Filename块、KeyData块的格式,将整个文本解析为结构化的对象列表,直接按需求提取关联数据,完全替代繁琐的嵌套循环逻辑。

示例思路(基于正则)

你可以用包含多捕获组的正则,一次性匹配每个Dataset的完整块,直接提取所需内容:

import re

with open('file.txt', 'r') as f:
    text = f.read()

# 正则匹配每个Dataset块,捕获Dataset编号、目标文件名、关键数据
pattern = re.compile(
    r'\[Dataset (\d+)\]'          # 匹配Dataset块开头
    r'.*?'                        # 跳过中间无关内容
    r'\[Filename (\d+)\]'         # 捕获关键分隔符前的最后一个Filename
    r'.*?'                        # 跳过中间内容
    r'\[Key Data Delimiter\] (!.*?) \[Key Data Delimiter\]'  # 捕获关键数据
    r'.*?'                        # 跳过块尾无关内容
    r'(?=\[Dataset|\Z)',          # 块结束标记:下一个Dataset或文本末尾
    re.DOTALL | re.VERBOSE
)

# 提取并格式化输出
for dataset_num, filename_num, key_data in pattern.findall(text):
    print(f"[Dataset {dataset_num}], [Filename {filename_num}], {key_data}.")

内容的提问来源于stack exchange,提问作者bonzoon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 06:48:26