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

如何用正则从不同格式的发票文本中提取发票编号?

发票编号提取正则解决方案

原正则问题分析

你之前使用的(?<=invoice).+\d+存在几个核心问题:

  • .+会贪婪匹配invoice到最后一个数字之间的所有内容,无法精准定位发票编号;
  • 未考虑大小写差异(如Invoice、INVOICE);
  • 未适配中文场景下的“发票编号”“发票号”等关键词;
  • 没有限定发票编号的格式范围,容易捕获无关数字。

针对性正则方案

根据发票编号的常见特征,提供以下几种精准提取的正则:

1. 固定长度纯数字编号(如示例中的7位数字)

(?i)(?:invoice(?:\s*no\.?)?|发票(?:编号|号))\s*[:#-]?\s*(\d{7})
  • 说明:
    • (?i):忽略大小写,兼容英文大小写写法;
    • (?:invoice(?:\s*no\.?)?|发票(?:编号|号)):匹配英文的invoice/invoice no.,或中文的“发票编号”/“发票号”;
    • \s*[:#-]?\s*:匹配编号前可能的分隔符(冒号、井号、短横线或空格);
    • (\d{7}):捕获固定7位的纯数字编号,可根据实际编号长度调整数字位数(如\d{8}匹配8位)。

2. 任意长度纯数字编号

如果发票编号长度不固定,将上面的\d{7}替换为\d+即可:

(?i)(?:invoice(?:\s*no\.?)?|发票(?:编号|号))\s*[:#-]?\s*(\d+)

3. 含字母的混合编号(如INV12345)

若编号包含字母,调整捕获组为字母数字组合:

(?i)(?:invoice(?:\s*no\.?)?|发票(?:编号|号))\s*[:#-]?\s*([A-Z0-9]+)

无明确关键词时的兜底方案

如果发票文本中没有“发票”相关关键词,可基于编号的唯一性特征提取(假设编号是文本中最长的数字串,或唯一的长数字串):

\b\d{7}\b
  • 说明:匹配独立的7位数字串,需确保文本中无其他同长度的无关数字(如订单号、手机号等)。

测试示例

  • 输入文本:公司XYZ 发票编号:1234545 单价:100 总价:500 → 捕获结果:1234545
  • 输入文本:Company ABC Invoice No. 1234545, Unit Price: 200 → 捕获结果:1234545

内容的提问来源于stack exchange,提问作者panes-rubrics

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 12:02:12