如何用正则表达式拆分带唯一标题的法律文档小节?
法律文档章节拆分的正则优化方案
问题说明
需拆分结构固定的法律文档语料库:
- 文档开头为
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
相关产品推荐
相关产品推荐

