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

基于正则表达式拆分SECTION/RUBRIQUE章节文本的问题求助

解决长文本按完整章节拆分的问题

要实现忽略开头非章节内容、每个chunk包含完整章节(标题+内容)的需求,你可以用Python正则的正向预查+非贪婪匹配直接提取完整章节块,避免标题和内容分离的问题。

核心思路

用正则匹配从SECTION n或RUBRIQUE n开头,到下一个章节开头或文本结尾的所有内容,一次性捕获完整章节。

代码实现

import re

# 示例长文本
long_text = """开头无关内容,将被忽略
SECTION 1 第一章标题
这是第一章的多行内容,
包含换行和任意字符。
RUBRIQUE 2 第二章标题
第二章的内容,
继续直到下一个章节。
SECTION 3 第三章标题
第三章的内容到此结束。"""

# 正则模式:匹配完整章节块
# (?:...) 是非捕获分组,避免返回冗余的前缀匹配
pattern = r'((?:SECTION|RUBRIQUE)\s+\d+.*?(?=(?:SECTION|RUBRIQUE)\s+\d+|$))'

# 提取所有完整章节
# re.DOTALL 让 . 匹配换行符,处理多行内容
# re.UNICODE 适配法语特殊字符(RUBRIQUE是法语词汇)
chapters = re.findall(pattern, long_text, flags=re.DOTALL | re.UNICODE)

# 输出结果
for i, chapter in enumerate(chapters, 1):
    print(f"--- 完整章节 {i} ---")
    print(chapter.strip())
    print("\n")

关键细节说明

  1. 自动过滤开头无关内容:re.findall只会匹配符合模式的内容,开头无关的文本不会被捕获,直接过滤。
  2. 完整章节捕获逻辑:
    • (?:SECTION|RUBRIQUE)\s+\d+:匹配章节前缀(SECTION/RUBRIQUE)+ 空格 + 章节编号
    • .*?:非贪婪匹配任意字符,避免过度匹配到后续章节
    • (?=(?:SECTION|RUBRIQUE)\s+\d+|$):正向预查,遇到下一个章节开头或文本结尾就停止,确保每个匹配都是独立完整的章节
  3. 处理多行内容:re.DOTALL标志让正则中的.能匹配换行符,适配章节内的多行文本。

适配不同标题格式

如果你的章节标题有特殊格式(比如带冒号SECTION 1: 标题),可以修改正则模式的标题部分,例如:

pattern = r'((?:SECTION|RUBRIQUE)\s+\d+\s*[:-]\s*.*?(?=(?:SECTION|RUBRIQUE)\s+\d+|$))'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 12:52:28