如何使用PyPDF2提取PDF匹配字符串对应span后紧跟的三位数字
解决方法
1 先修正原有代码的顺序错误
你现有代码的执行顺序有问题,PageObj 变量定义在调用它提取文本之后,会触发未定义报错,先调整执行顺序:
import re import PyPDF2 # 初始化PDF读取对象 pdf_reader = PyPDF2.PdfFileReader(filename) # 先获取页面对象 PageObj = pdf_reader.getPage(0) # 再提取页面文本 Text = PageObj.extractText()
2 调整正则规则动态提取三位数字
不需要依赖固定的span位置,直接用正则捕获组匹配your number is后紧跟的三位数字即可:
# 定义匹配规则,用括号包裹需要提取的部分形成捕获组 pattern = r'your number is (\d{3})' ResSearch = re.search(pattern, Text) # 提取结果,增加判空避免匹配不到时报错 if ResSearch: target_num = ResSearch.group(1) print(target_num) # 输出就是你要的三位数字,比如示例里的105 else: print("未匹配到目标内容")
规则说明
r'your number is '先精准匹配前缀字符串\d{3}表示匹配连续3位数字- 外层括号
()是捕获组,匹配到的内容会单独存入group(1),直接调用即可拿到目标数字,不需要手动计算偏移量,即使PDF更新后字符串位置变化,只要前缀存在就能正常提取。
内容的提问来源于stack exchange,提问作者user17312322
相关产品推荐
相关产品推荐

