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

如何用Regex检测章节与子章节?正则代码无法识别子章节的解决方法

解决章节与子章节内容提取问题

原代码无法识别带层级的子章节(如2.1.2),问题出在正则表达式的匹配逻辑上。以下是修复后的代码:

import re

def extract_sections_and_content(text):
    # 匹配所有层级的章节号(如1、2.1、2.1.2)+ 标题,捕获内容直到下一个章节开头
    pattern = r'(?P<section>^\d+(?:\.\d+)*\s+.+)\n(?P<content>(?:(?!^\d+(?:\.\d+)*\s+.+).)*)'
    matches = re.finditer(pattern, text, re.DOTALL | re.MULTILINE)
    section_content_pairs = [
        (re.sub(r'^\d+(?:\.\d+)*\s+', '', match.group('section').strip()), 
         match.group('content').strip()) 
        for match in matches
    ]
    return dict(section_content_pairs)

# 测试用例
text = """
1 Introduction
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
2 Background
Praesent euismod, arcu quis fermentum pulvinar, urna ex euismod ex.
2.1.2 Introduction to Topic
Vestibulum nec lorem eu ligula faucibus cursus.
3 Conclusion
Sed sed malesuada magna, at dignissim quam.
"""

result = extract_sections_and_content(text)
print(result)

修复说明

  1. 章节匹配简化:移除原正则中多余的(?:\s+\S+)?部分,确保能匹配任意层级的章节编号加标题的格式。
  2. 内容捕获优化:简化内容部分的否定前瞻逻辑,确保捕获从当前章节结束到下一个章节开头的所有内容(含换行)。

运行输出

{
    'Introduction': 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',
    'Background': 'Praesent euismod, arcu quis fermentum pulvinar, urna ex euismod ex.',
    'Introduction to Topic': 'Vestibulum nec lorem eu ligula faucibus cursus.',
    'Conclusion': 'Sed sed malesuada magna, at dignissim quam.'
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 16:35:36