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

在Apple Numbers中使用正则表达式提取不同格式发票中发票号的方案咨询

在Apple Numbers中使用正则表达式提取不同格式发票中发票号的方案咨询

嘿,我完全懂你现在的困扰——不同公司的发票格式五花八门,字段顺序乱得很,而且Apple Numbers还不支持PCRE里的\K语法,之前能用的正则直接就失效了对吧?别慌,咱们来一步步搞定这个问题。

首先先梳理下你给出的两个示例发票文本:

示例1(XYZ公司):This is invoice from company XYZ - 1234545 product name , product number 444456, information invoice unit cost $12.0 and invoice total $1343.00
示例2(ABC公司):This is invoice from company ABC - 1234545 product name and information invoice total cost $6777 and invoice unit cost $654

你会发现这两个例子里,发票号都是紧跟在company [公司名] - 这个结构之后的一串数字,这就是我们可以利用的共性。因为Apple Numbers用的是ICU正则引擎,不支持\K,那我们就用捕获组来替代它的功能,通过REGEX.EXTRACT函数提取捕获到的内容。

针对你给出的示例的解决方案

直接用下面这个正则表达式配合Numbers的函数就能提取出发票号:

company [^-]+ - (\d+)

对应的Numbers公式(假设发票文本在A1单元格):

=REGEX.EXTRACT(A1, "company [^-]+ - (\d+)")

我来拆解下这个正则的逻辑:

  • company [^-]+:匹配company 之后直到短横-之前的所有内容(不管公司名是字母、数字还是混合字符都能覆盖)
  • - :精准匹配短横和后面的空格
  • (\d+):把后面的连续数字(也就是发票号)放到捕获组里,Numbers的REGEX.EXTRACT会自动返回这个捕获组的内容

测试一下的话,不管是XYZ还是ABC公司的发票文本,这个公式都能返回你想要的1234545。

更通用的扩展方案

如果遇到其他格式的发票,比如发票号前面的关键词不是company [公司名] - ,而是Invoice #、Inv No:这类,我们可以用正则的分支结构来匹配多种前缀:

(invoice # |inv no: |company [^-]+ - )(\d+)

对应的公式:

=REGEX.EXTRACT(A1, "(invoice # |inv no: |company [^-]+ - )(\d+)")

这里的逻辑是同时匹配多种可能的发票号前缀,然后捕获后面的数字串。

另外,如果你的发票号是文本中最长的数字串(比如比产品编号、单价总价的数字都长),还可以用这个正则来直接匹配最长数字串:

(\d{7,})

(这里的{7,}表示匹配7位及以上的数字,你可以根据自己发票号的长度调整位数)

小提醒

不同公司的发票格式可能会有特殊情况,比如发票号包含字母或连字符(比如INV-67890),这时候你需要调整正则的匹配规则,比如改成([A-Z]+-\d+)来匹配这种格式的发票号。建议先收集几种不同格式的发票文本,测试正则是否能准确提取,再批量应用。

备注:内容来源于stack exchange,提问作者sit123

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 12:18:21