如何用Python合并同标题文本并整理为指定输出格式?
文本分组合并解决方案
需求描述
将输入文本中同一[ADD xxx]标题下的内容合并,去除空行后按标题分组输出。
输入示例
[ADD BD] 'text1' [ADD BD] 'text2' [ADD BD] 'text3' [ADD TLD] 'text4' [ADD BRD] 'text5' [ADD BRD] 'text6'
期望输出
[ADD BD] 'text1' 'text2' 'text3' [ADD TLD] 'text4' [ADD BRD] 'text5' 'text6'
实现方法
方法一:逐行处理+字典分组
逻辑直观易理解,能高效处理空行和分组:
test0 = """ [ADD BD] 'text1' [ADD BD] 'text2' [ADD BD] 'text3' [ADD TLD] 'text4' [ADD BRD] 'text5' [ADD BRD] 'text6' """ # 初始化字典存储每个标题对应的内容 grouped_content = {} current_title = None # 逐行遍历文本 for line in test0.split('\n'): stripped_line = line.strip() # 跳过空行 if not stripped_line: continue # 判断是否为标题行 if stripped_line.startswith('[ADD') and stripped_line.endswith(']'): current_title = stripped_line # 若标题未在字典中,初始化空列表 if current_title not in grouped_content: grouped_content[current_title] = [] else: # 将内容添加到当前标题的列表中 if current_title is not None: grouped_content[current_title].append(stripped_line) # 生成输出内容 output = [] for title, contents in grouped_content.items(): output.append(title) output.extend(contents) output.append('') # 标题间添加空行分隔 # 打印结果,移除末尾多余空行 print('\n'.join(output).rstrip('\n'))
关键逻辑
- 用字典
grouped_content存储标题与对应内容的映射,键为标题字符串,值为内容列表。 - 逐行处理时,先去除行首尾空白,跳过空行;识别标题行后切换当前分组,非标题行则加入当前分组的内容列表。
- 输出时按标题+内容的格式拼接,标题之间用空行分隔。
方法二:正则表达式提取+分组
如果倾向用正则,可以一次性提取所有标题-内容对,再整理分组:
import re test0 = """ [ADD BD] 'text1' [ADD BD] 'text2' [ADD BD] 'text3' [ADD TLD] 'text4' [ADD BRD] 'text5' [ADD BRD] 'text6' """ # 正则匹配所有标题和对应的内容行 pattern = r'(\[ADD .+?\])\s*(\'.+?\')' matches = re.findall(pattern, test0, re.DOTALL) # 分组整理内容 grouped_content = {} for title, content in matches: clean_content = content.strip() if title not in grouped_content: grouped_content[title] = [] grouped_content[title].append(clean_content) # 生成并打印输出 output = [] for title, contents in grouped_content.items(): output.append(title) output.extend(contents) output.append('') print('\n'.join(output).rstrip())
关键逻辑
- 正则表达式
(\[ADD .+?\])\s*(\'.+?\')匹配标题行和紧随其后的内容行,re.DOTALL允许匹配跨行内容。 - 提取到所有匹配对后,用字典分组整理,最终按格式输出。
内容的提问来源于stack exchange,提问作者Y. Pat
相关产品推荐
相关产品推荐

