如何用Python实现带章节文本的结构化分割(规避换行分割限制)
解决方案:正则表达式+Python处理
核心思路
章节标题为单独一行的全大写文本(含空格),内容从标题下一行开始,直到下一个全大写标题行或文本结尾。利用正则的正向预查和DOTALL模式捕获标题和对应内容,避免误分割章节内部的换行。
正则表达式说明
(?P<title>[A-Z ]+)\n(?P<content>.*?)(?=\n[A-Z ]+\n|\Z)
(?P<title>[A-Z ]+):命名捕获组,匹配全大写字母和空格组成的标题文本,后续用strip()处理首尾空格。\n:匹配标题行后的换行符,分隔标题与内容。(?P<content>.*?):非贪婪模式捕获内容,.*?会匹配到下一个断言位置为止,避免过度匹配。(?=\n[A-Z ]+\n|\Z):正向预查,匹配两种边界:\n[A-Z ]+\n:下一个全大写标题行的开头换行+标题+换行\Z:文本末尾,处理最后一个章节的内容
Python 实现代码
import re # 输入文本(替换为你的实际文本) input_text = """RELATED APPLICATIONS This application cla...... 2006. TECHNICAL FIELD This application relates to t.....e number. BACKGROUND User-initiated money and funds tra.....sfer and/or payment. SUMMARY A system and method for p.......als. DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS The following detailed d.....""" # 编译正则,启用DOTALL模式让`.`匹配换行符 pattern = re.compile(r'(?P<title>[A-Z ]+)\n(?P<content>.*?)(?=\n[A-Z ]+\n|\Z)', re.DOTALL) output_parts = [] for match in pattern.finditer(input_text): # 清理标题首尾空格,清理内容末尾多余换行 clean_title = match.group('title').strip() clean_content = match.group('content').rstrip('\n') output_parts.append(f'{clean_title}="{clean_content}"') # 拼接所有键值对,无换行分隔 final_result = ''.join(output_parts) print(final_result)
关键细节
- re.DOTALL:必须启用该模式,否则
.无法匹配章节内容内部的换行符,会导致内容被截断。 - 非贪婪匹配
.*?:确保内容只捕获到下一个章节标题前,而不是直接匹配到文本末尾。 - 内容清理
rstrip('\n'):移除内容末尾的多余换行,避免键值对中出现不必要的空行。
内容的提问来源于stack exchange,提问作者ashish bhardwaj
相关产品推荐
相关产品推荐

