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

Python提取文本文件Start与End间数据并剪切删除原内容的实现方案

文本标记块剪切功能实现方案

原有代码问题

  • 仅调用一次find()方法,只能匹配第一组Start/End标记,无法处理多块场景
  • 仅执行了文件读操作,没有将删除提取内容后的剩余内容写回原文件,因此原文件不会发生变更
  • 没有做非贪婪匹配限制,若存在多组标记时会直接匹配第一个Start到最后一个End的全部内容,结果不符合预期

实现思路

  1. 读取文件全量内容
  2. 用正则全局非贪婪匹配所有Start到End的标记块,提取块内有效内容
  3. 从原内容中删除所有匹配到的标记块
  4. 将剩余内容写回原文件完成剪切操作

完整实现代码

import re

# 标记定义
START_TAG = "Start"
END_TAG = "End"
file_path = "file.txt"

# 读取原文件内容
with open(file_path, "r", encoding="utf-8") as f:
    content = f.read()

# 正则匹配所有Start到End的块,re.DOTALL让.可以匹配换行符,?开启非贪婪匹配
pattern = re.compile(re.escape(START_TAG) + r"(.*?)" + re.escape(END_TAG), re.DOTALL)
# 提取所有块内内容,自动去除首尾空白
extracted_blocks = [block.strip() for block in pattern.findall(content)]
# 删除原内容中所有匹配的标记块,得到剩余内容
remaining_content = pattern.sub("", content).strip()

# 将剩余内容写回原文件
with open(file_path, "w", encoding="utf-8") as f:
    f.write(remaining_content)

# 输出提取到的所有块内容
for idx, block in enumerate(extracted_blocks, 1):
    print(f"=== 提取到第{idx}个块内容 ===")
    print(block)
    print("="*30)

效果说明

以你提供的file.txt为例,运行代码后:

  • 会提取到2个标记块的内容,分别对应两个视频的元数据
  • 原文件中所有Start到End的内容会被删除,仅保留块之间的--- Passing Data ---内容(如果需要同时删除这类无意义分隔符,可以在写回前对remaining_content做额外过滤处理)

内容的提问来源于stack exchange,提问作者Yunus Emre Ulusoy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:15:04