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

使用Python invoice2data提取PDF发票时正则匹配不全问题求助

解决PDF转文本后"CGK / WIII"匹配不全的问题

问题根源

你遇到的情况是PDF转文本时,部分"CGK / WIII"里的空格并非普通空格(ASCII 32),而是非标准空白字符(比如不间断空格\u00A0、全角空格\u2000系列),肉眼无法区分,但正则或字符串匹配会严格识别编码,导致漏匹配。

具体解决方案

  1. 排查字符编码
    用Python打印疑似行的字符编码,确认特殊字符:

    # 取一行疑似"CGK / WIII"的文本
    line = "CGK / WIII ..."  # 替换为你实际的问题文本行
    print([(c, ord(c)) for c in line[:8]])
    

    输出里如果看到空格的编码不是32,就说明是特殊空白字符导致的问题。

  2. 调整正则表达式
    把匹配空格的部分改成能兼容所有空白的规则:

    • 匹配任意数量的空白(包括特殊空格):CGK\s+\/\s+WIII
    • 精准匹配常见特殊空白:CGK[\u0020\u00A0\u2000-\u200F]*\/[\u0020\u00A0\u2000-\u200F]*WIII
      替换你原来的正则,就能匹配到所有4行内容。
  3. 预处理文本统一空白
    先把所有非标准空白替换成普通空格,再进行匹配:

    import re
    # 清理文本中的特殊空白
    cleaned_text = re.sub(r'[\u00A0\u2000-\u200F\u202F]', ' ', raw_pdf_text)
    # 现在直接匹配固定字符串或原正则都能生效
    all_matches = re.findall(r'CGK / WIII', cleaned_text)
    
  4. 适配invoice2data模板
    如果是用invoice2data的YAML模板,直接把字段的正则改成兼容版本:

    fields:
      flight_entries:
        regex: 'CGK\s+\/\s+WIII.*'
        type: list
        group: all
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 16:50:25