【问题标题】:regexextract isn't working the way I want in Google Sheetsregexextract 在 Google 表格中无法按我想要的方式工作
【发布时间】:2019-12-06 02:16:55
【问题描述】:

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

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

第一个破折号之前的信息必须是字母。
第一个和第二个破折号之间的信息必须是字母(即 A-z)。
第二个和第三个破折号之间的信息必须是数字。
我希望忽略其他所有内容(我已将 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 应该会出错

【问题讨论】:

    标签: regex google-sheets split google-sheets-formula array-formulas


    【解决方案1】:

    使用这个正则表达式:

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

    并提取组2

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

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

    【讨论】:

    • 是的,你完全正确:[A-Z{]\^_a-z]+是你在[A-Za-z]的尝试。
    【解决方案2】:

    尝试:

    =ARRAYFORMULA(IFNA(REGEXEXTRACT(INDEX(SPLIT(B1:B, "-"),,2)&"", "\D+")&
     REGEXEXTRACT(INDEX("-"&SPLIT(B1:B, "-"),,3), "-\d+")))
    


    或:

    =ARRAYFORMULA(IFERROR(IF((REGEXMATCH(INDEX(SPLIT(B1:B, "-"),,1), "[A-Za-z]+"))*
     (NOT(REGEXMATCH(INDEX(SPLIT(B1:B, "-"),,1), "[0-9]+"))), 
     IFNA(REGEXEXTRACT(INDEX(SPLIT(B1:B, "-"),,2)&"", "\D+")&
      REGEXEXTRACT(INDEX("-"&SPLIT(B1:B, "-"),,3), "-\d+")), )))
    

    【讨论】:

    • 谢谢。我试图保持公式“纯粹”正则表达式,但我喜欢使用 Split 函数来提供帮助的想法。
    猜你喜欢
    • 2019-01-18
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-12
    • 2021-12-28
    • 2013-07-16
    • 1970-01-01
    相关资源
    最近更新 更多