基于正则表达式拆分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")
关键细节说明
- 自动过滤开头无关内容:
re.findall只会匹配符合模式的内容,开头无关的文本不会被捕获,直接过滤。 - 完整章节捕获逻辑:
(?:SECTION|RUBRIQUE)\s+\d+:匹配章节前缀(SECTION/RUBRIQUE)+ 空格 + 章节编号.*?:非贪婪匹配任意字符,避免过度匹配到后续章节(?=(?:SECTION|RUBRIQUE)\s+\d+|$):正向预查,遇到下一个章节开头或文本结尾就停止,确保每个匹配都是独立完整的章节
- 处理多行内容:
re.DOTALL标志让正则中的.能匹配换行符,适配章节内的多行文本。
适配不同标题格式
如果你的章节标题有特殊格式(比如带冒号SECTION 1: 标题),可以修改正则模式的标题部分,例如:
pattern = r'((?:SECTION|RUBRIQUE)\s+\d+\s*[:-]\s*.*?(?=(?:SECTION|RUBRIQUE)\s+\d+|$))'
内容的提问来源于stack exchange,提问作者famas23
相关产品推荐
相关产品推荐

