如何用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)
修复说明
- 章节匹配简化:移除原正则中多余的
(?:\s+\S+)?部分,确保能匹配任意层级的章节编号加标题的格式。 - 内容捕获优化:简化内容部分的否定前瞻逻辑,确保捕获从当前章节结束到下一个章节开头的所有内容(含换行)。
运行输出
{ '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
相关产品推荐
相关产品推荐

