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

使用Python正则表达式解析多块内容文件时遇到的问题

解决块解析中End标记后内容丢失的问题

我来帮你搞定这个块解析的小麻烦!你现在的问题是,原本以为每个块会在$ End of [块名]行结束,但实际有些块的注释内容会跟在End行后面,直到下一个$ Start of出现才是真正的块边界对吧?

核心思路调整

原来的解析逻辑是把$ End of ...作为块的结束标记,但实际上块的真正结束应该是下一个$ Start of ...的起始行(或者文件末尾)。这样就能把End行之后、下一个Start行之前的所有内容都纳入对应块的范围。

具体实现示例(Python)

这里给你写个简单的Python实现,你可以根据自己用的语言调整逻辑:

def parse_blocks_from_file(file_path):
    blocks = {}
    current_block_name = None
    current_block_content = []

    # 先把文件所有行读进来
    with open(file_path, 'r', encoding='utf-8') as f:
        all_lines = f.readlines()

    for line in all_lines:
        # 保留原行的格式(除了末尾的换行符可以统一处理)
        cleaned_line = line.rstrip('\n')
        
        # 检测块的开始标记
        if cleaned_line.startswith('$ Start of '):
            # 如果之前有未保存的块,先存入字典
            if current_block_name is not None:
                blocks[current_block_name] = '\n'.join(current_block_content)
            
            # 初始化新块
            current_block_name = cleaned_line.split('$ Start of ')[1].strip()
            current_block_content = [cleaned_line]
        elif current_block_name is not None:
            # 还在当前块的范围内,继续收集内容
            current_block_content.append(cleaned_line)
    
    # 处理文件末尾的最后一个块
    if current_block_name is not None:
        blocks[current_block_name] = '\n'.join(current_block_content)
    
    return blocks

逻辑说明

  • 当遇到$ Start of X时,就开启一个新的块,同时把之前的块保存下来
  • 在新块开启前,所有的行(包括$ End of X以及后面的注释)都会被收集到当前块里
  • 最后一个块会一直收集到文件结束,不会遗漏内容

这样处理后,你第二个块里$ End of something2后面的注释就会被正确纳入something2的块内容里啦!

内容的提问来源于stack exchange,提问作者윤제균

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:31:07