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

如何用正则表达式拆分带唯一标题的法律文档小节?

法律文档章节拆分的正则优化方案

问题说明

需拆分结构固定的法律文档语料库:

  • 文档开头为ARGUMENT标题(部分文档无后续小节,需完整保留该部分)
  • 后续小节以罗马数字I至X加.作为标题开头
  • 文档结尾为CONCLUSION部分

示例文档:

string = """ARGUMENT
Summary of argument

I. TITLE OF SUBSECTION 1
Text of subsection 1

II. TITLE OF SUBSECTION 2
Text of subsection 2

CONCLUSION
Text of conclusion"""

原使用的拆分正则:

import re
pattern = r'(\nARGUMENT|\nI\.|\nII\.|\nIII\.|\nIV\.|\nV\.|\nVI\.|\nVII\.|\nVIII\.|\nIX\.|\nX\.|\nCONCLUSION.*)'
result = re.split(pattern, string)

实际输出(标题与内容被拆分,不符合预期):

['ARGUMENT\nSummary of argument\n', '\nI.', ' TITLE OF SUBSECTION 1\nText of subsection 1\n', '\nII.', ' TITLE OF SUBSECTION 2\nText of subsection 2\n', '\nCONCLUSION', '\nText of conclusion\n']

期望输出(标题与对应内容合并为列表项):

['ARGUMENT  Summary of argument', 'I. TITLE OF SUBSECTION 1  Text of subsection 1', 'II. TITLE OF SUBSECTION 2  Text of subsection 2', 'CONCLUSION  Text of conclusion']

解决方案

1. 替换思路:用re.findall替代re.split

re.split的核心是切割字符串,而此处更适合用匹配提取的逻辑,直接捕获每个章节的标题+内容整体,避免拆分。

2. 优化罗马数字匹配

无需逐个枚举I到X,用正则直接匹配符合规则的罗马数字标题:

# 匹配I-X的罗马数字(带点)
roman_title = r'(?:[IVX]+\.)'

3. 完整代码实现

import re

string = """ARGUMENT
Summary of argument

I. TITLE OF SUBSECTION 1
Text of subsection 1

II. TITLE OF SUBSECTION 2
Text of subsection 2

CONCLUSION
Text of conclusion"""

# 整合后的最终正则
pattern = r'(ARGUMENT|%s|CONCLUSION)(?:\n|\s)+(.+?)(?=\n(?:ARGUMENT|%s|CONCLUSION)|\Z)' % (roman_title, roman_title)
# 使用re.DOTALL让.匹配换行符
matches = re.findall(pattern, string, re.DOTALL)

# 格式化结果:合并标题和内容,去除多余换行与空格
result = [
    f"{title.strip()}  {content.strip().replace('\n', ' ')}" 
    for title, content in matches
]

print(result)

输出结果:

['ARGUMENT  Summary of argument', 'I.  TITLE OF SUBSECTION 1  Text of subsection 1', 'II.  TITLE OF SUBSECTION 2  Text of subsection 2', 'CONCLUSION  Text of conclusion']

正则逻辑说明

  • (ARGUMENT|(?:[IVX]+\.)|CONCLUSION):捕获章节标题(ARGUMENT、罗马数字章节、CONCLUSION),非捕获组(?:)用于罗马数字的规则匹配,不单独输出
  • (?:\n|\s)+:匹配标题后的换行或空白字符,不纳入最终结果
  • (.+?):非贪婪模式匹配章节内容,避免过度匹配到下一个章节
  • (?=\n(?:ARGUMENT|(?:[IVX]+\.)|CONCLUSION)|\Z):正向预查,匹配下一个章节标题或字符串结尾的位置,确保内容仅包含当前章节的内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 00:19:57