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

如何用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)

关键细节

  1. re.DOTALL:必须启用该模式,否则.无法匹配章节内容内部的换行符,会导致内容被截断。
  2. 非贪婪匹配.*?:确保内容只捕获到下一个章节标题前,而不是直接匹配到文本末尾。
  3. 内容清理rstrip('\n'):移除内容末尾的多余换行,避免键值对中出现不必要的空行。

内容的提问来源于stack exchange,提问作者ashish bhardwaj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 05:35:10