首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则提取液的工作方式不像我想要的那样

正则提取液的工作方式不像我想要的那样
EN

Stack Overflow用户
提问于 2019-12-06 02:16:55
回答 2查看 370关注 0票数 0

...or .我的公式有问题。

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

第一个破折号之前的信息必须是字母。

第一和第二个破折号之间的信息必须是字母(即A)。

第二和第三冲刺之间的信息必须是数字。

我希望其他的事情都被忽略(我已经用iferror包装了regex提取液来完成这个任务)

这是我的公式:

代码语言:javascript
复制
=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应出错

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-06 02:26:15

使用这个正则表达式:

代码语言:javascript
复制
[A-Za-z]+-[A-Za-z]+-([0-9]+)-

提取2组。

正则表达式存在一些问题,但主要的问题是[A-z]并不意味着“所有字母”,它意味着“Az之间的所有字符”,其中包括Za之间的字符,即[\]^_和回勾。

我怀疑[A-Z{\]\^_A]+is your attempt atA‘。

票数 0
EN

Stack Overflow用户

发布于 2019-12-06 21:14:09

尝试:

代码语言:javascript
复制
=ARRAYFORMULA(IFNA(REGEXEXTRACT(INDEX(SPLIT(B1:B, "-"),,2)&"", "\D+")&
 REGEXEXTRACT(INDEX("-"&SPLIT(B1:B, "-"),,3), "-\d+")))

或者:

代码语言:javascript
复制
=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+")), )))

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59205917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档