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

Python如何用单条正则提取PDF中跨多行的指定格式条目?

正则跨多行匹配PDF提取指定格式条目解决方案

你遇到的问题根源是原有正则用re.MULTILINE配合行尾匹配符$,只能捕获单行内容,要实现跨行匹配完整条目,仅需调整正则规则和匹配flag即可:

可用正则表达式

你需要同时开启re.DOTALL(让.可以匹配换行符)和re.IGNORECASE(兼容(U)大小写匹配),不要用行尾锚定,而是匹配到条目末尾的闭合括号为止,正则写法如下:

^\d{1,2}\. \(U\) [^:]+:.*?\(.*?\)(?=\s*(?:^\d{1,2}\. \(U\)|\Z))

匹配逻辑说明:

  • ^\d{1,2}\. \(U\) :严格匹配条目开头的「数字+点+空格+(U)+空格」规则
  • [^:]+::匹配国家字段直到冒号位置,兼容包含特殊字符的国家名称
  • .*?\(.*?\):非贪婪匹配所有中间内容,直到遇到括号并完整匹配整个括号内容(包括跨行的括号内文本)
  • (?=\s*(?:^\d{1,2}\. \(U\)|\Z)):正向预查确认匹配结束位置,要么是下一个条目的开头,要么是全文末尾,避免匹配到其他无关内容

Python调用示例

直接调用re.findall传入对应flag即可,不需要拆分按行遍历:

import re
# pdf_content为pdfminer提取的全文文本内容
result_list = re.findall(r'^\d{1,2}\. \(U\) [^:]+:.*?\(.*?\)(?=\s*(?:^\d{1,2}\. \(U\)|\Z))', pdf_content, flags=re.MULTILINE | re.DOTALL | re.IGNORECASE)

特殊场景适配

如果存在括号嵌套的情况,可以把括号匹配部分替换为\([^()]*(?:\([^()]*\)[^()]*)*\),即可支持最多2层嵌套括号的匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 04:15:04