PDF文档章节标题与子标题匹配正则表达式优化需求
匹配PDF章节与子标题的正则优化方案
优化后的正则表达式
针对两种标题格式,可使用两个精准正则,或合并为一个分支正则:
单独匹配章节标题(全大写格式)
^(\d+\.)\s([A-Z\s]+)$
单独匹配子标题(层级数字+带句号结尾的标题)
^(\d+(?:\.\d+)*)\s([A-Za-z,\s-]+)\.$
合并匹配两种标题
^(\d+(?:\.\d+)*)\s(?:([A-Z\s]+)$|([A-Za-z,\s-]+)\.$)
关键优化点(解决原正则的两个问题)
修复子标题匹配不全
- 原正则的第二个捕获组
[a-zA-Z0-9_ ]*仅支持字母、数字、下划线和空格,无法匹配标题中的逗号、连字符等标点。优化后改用[A-Za-z,\s-]+,可覆盖子标题里的多词、逗号、空格和连字符,完整捕获标题内容。 - 子标题正则末尾添加
\.$,强制匹配标题结尾的句号,确保捕获到完整的子标题行。
- 原正则的第二个捕获组
避免误匹配非标题文本
- 章节标题通过
[A-Z\s]+限制为全大写内容,过滤掉大小写混合或小写的普通数字开头文本(如1. 2023 monthly report)。 - 子标题要求末尾必须带句号,排除无句号的数字开头行。
- 全程用
^和$锚定整行,确保匹配的是完整的标题行,而非行内的数字片段。
- 章节标题通过
测试验证
- 章节标题示例:
1. SCOPE→ 捕获组1为1.,捕获组2为SCOPE - 子标题示例1:
1.1 Scope.→ 捕获组1为1.1,捕获组2为Scope - 子标题示例2:
1.3 Abbreviations, Acronyms, and Symbols.→ 捕获组1为1.3,捕获组2为Abbreviations, Acronyms, and Symbols
灵活调整
如果PDF标题中包含其他标点(如冒号、分号),可将其加入字符集,例如把[A-Za-z,\s-]+修改为[A-Za-z,\s:-]+,适配实际文档格式。
内容的提问来源于stack exchange,提问作者Dom
相关产品推荐
相关产品推荐

