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

Python 3.34提取PDF中多个ID值失败,求代码修正方案

解决PDF中提取多个ID的问题

我来帮你搞定这个提取ID1和ID2的问题,你的代码目前有两个核心问题:正则表达式的语法错误,以及函数只能处理单个匹配的逻辑限制。我们一步步来修正:

1. 修正正则表达式的写法

你原来尝试用|连接两个模式的写法是错误的,Python里不能直接把两个字符串用|拼接,必须把整个匹配规则写在一个正则字符串里。针对ID1和ID2,我们可以写一个更简洁的正则,同时捕获ID类型和对应的数字:

pattern = r'ID(1|2):(\d+)(?:\D|$)'
  • ID(1|2):匹配ID1或ID2,(1|2)会捕获是1还是2
  • (\d+):捕获ID后面的所有数字
  • (?:\D|$):非捕获组,匹配数字后面的非数字字符或者字符串结尾(避免数字在文本末尾时匹配不到)

2. 修改extractWhiteText函数

原来的函数只用了re.search(只找第一个匹配),而且只返回一个cID,无法处理多个ID。我们改成用re.finditer遍历所有匹配,把每个ID对应的值存入字典:

import re

def extractWhiteText(pattern, text):
    ids_dict = {}
    # 遍历所有匹配到的结果
    for match in re.finditer(pattern, text):
        id_key = f"ID{match.group(1)}"  # 生成ID1或ID2作为键
        ids_dict[id_key] = int(match.group(2))  # 把数字转为整数存入字典
    return ids_dict

3. 完整调用示例

结合你原来的PDF提取代码,完整的调用流程是:

# 假设你已经用PyPDF2或其他库获取了page的text
text = pdf.getPage(x).extractText()

# 使用修正后的正则和函数
pattern = r'ID(1|2):(\d+)(?:\D|$)'
ids = extractWhiteText(pattern, text)

# 打印结果,比如如果同时有ID1和ID2,会输出类似 {'ID1': 12345, 'ID2': 67890}
print(ids)

额外说明

如果你的PDF文本里ID的格式有特殊情况(比如ID和数字之间有空格,或者数字后面直接换行),可以稍微调整正则。比如如果ID后面有空格,改成ID(1|2):\s*(\d+)(?:\D|$)即可,\s*用来匹配0个或多个空白字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:57:50