首页 > 解决方案 > regexextract 在 Google 表格中无法按我想要的方式工作

问题描述

...或者更确切地说...我的公式有问题。

我有一系列项目编号,我只想提取一个和第三个破折号之间的信息(如果有的话)。

第一个破折号之前的信息必须是字母。
第一个和第二个破折号之间的信息必须是字母(即 Az)。
第二个和第三个破折号之间的信息必须是数字。
我希望忽略其他所有内容(我已将 regexextract 包装在 iferror 中以执行此操作)

这是我的公式:

=arrayformula(iferror(regexextract(B1:B,"[A-z]+-([A-Z\{\\\]\^_`a-z]+-[0-9]+)-"),"")

它大部分时间都在工作。

但是对于这个:AAB-2971-PN-B-11-03
它提取了这个:B-11
但我希望这个是一个错误/空白。

其他正确示例:
AAB-LL-1234-00 应该提取 LL-1234
AAN-1234 应该出错
AAC-1234-LL 应该出错
AAC-1234-ll-123 应该出错

标签: regexgoogle-sheetssplitgoogle-sheets-formulaarray-formulas

解决方案


使用这个正则表达式:

[A-Za-z]+-[A-Za-z]+-([0-9]+)-

并提取组2

您的正则表达式存在一些问题,但主要[A-z]问题不是“所有字母”,而是“和之间的所有字符Az,其中包括和之间的字符Z,即 , , ,a[\]号。^_

我怀疑 [A-Z{\]\^_az]+ is your attempt at[A-Za-z]`。


推荐阅读