使用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,提问作者윤제균
相关产品推荐
相关产品推荐

