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

如何匹配数字与点组成的序列?正则提取PDF内容匹配错误如何解决

问题原因

  • 正则语法错误:.在正则中是通配符,可匹配任意非换行字符,你没有对需要匹配的字面量小数点做转义,写的.{0,1}会匹配任意单个字符,而非你预期的可选小数点。
  • 变量名大小写不匹配:你定义存储提取文本的变量为textPage,但re.search中调用的是小写的textpage,Python大小写敏感,这里存在明显的语法错误。
  • 匹配逻辑不符合需求:re.search默认返回全文中第一个符合规则的匹配结果,你提取的PDF文本开头就是93,刚好适配你当前的错误正则,所以优先返回了93而非你想要的1.5.4。
  • 规则不严谨:你需要匹配的是多段用小数点连接的数字序列,现有规则没有限定小数点必须出现在数字之间,也没有排除单独数字的匹配场景。

解决方法

首先修正正则表达式,要匹配x.y.z这类多级数字编号,可使用规则\d{1,2}(?:\.\d{1,2})+:其中\d{1,2}匹配1-2位开头数字,(?:\.\d{1,2})+是非捕获组,匹配一个或多个「小数点+1-2位数字」的组合,既符合你要的编号格式,也不会误匹配单独的页码数字。
同时修正变量名大小写问题,添加匹配结果判空逻辑避免报错,修正后代码如下:

import PyPDF2
import re
import sys
       
if __name__ == '__main__':
    pdf_file = open('RH5-94.pdf','rb')
    read_pdf = PyPDF2.PdfFileReader(pdf_file)
    number_of_pages = read_pdf.getNumPages()
    # 修正后的正则,匹配至少有一级分隔的多级数字编号
    IdCis = r"\d{1,2}(?:\.\d{1,2})+"
    Description = "(?<=Description:)(.*)(?=Rationale)"
    Rationale = "(?<=Rationale:)(.*)(?=Audit)"    
    textPage = read_pdf.getPage(0).extractText() 
    match_res = re.search(IdCis, textPage)
    if match_res:
        print(match_res.group(0))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:54:05