正则表达式匹配2个或多个数字字符串中的

问题描述:

假设我有这样的字符串:正则表达式匹配2个或多个数字字符串中的

ABC-L-W7P-1423 
ABC-L-W7E-87 
CH-L-W7-756 

我需要抢号结尾。该数字可能是2,3或4位数字。但目前我所拥有的是:

=REGEXREPLACE(B2,"[^0-9]","") 

哪个当然也抓住了'W7P''我不想要'的'7'。 编辑:

我还需要匹配是这样的:

CH-M-311-MM 

所以总是有2,3或4(或5)位数字,但我需要排除个位数。

+1

'= REGEXREPLACE(B2,“[0-9] {2,4} $”,“”)' – anubhava

+0

这个作品 - 谢谢 - 但我已经添加了新的信息。我需要的号码在字符串的末尾不是必须的。 – daninthemix

+1

用'\ b [0-9] {2,4} \ b'尝试'= REGEXEXTRACT':'= REGEXEXTRACT(B2,“\ b [0-9] {2,4} \ b”)' –

您可以使用=REGEXEXTRACT\b[0-9]{2,4}\b

=REGEXEXTRACT(B2, "\b[0-9]{2,4}\b") 

regex demo

详细

  • \b - 领先字边界
  • [0-9]{2,4} - 2到4位
  • \b - 尾字边界

如果您的2-4位总是以-开头,您可以使用

=REGEXREPLACE(B2,"^.*-([0-9]{2,4})\b.*","$1") 

this regex demo

详细

  • ^ - 串
  • 开始
  • .*- - 任何0+字符,直到最后-后跟有...
  • ([0-9]{2,4}) - (第1组以$1在替换模式) - 2到4位
  • \b - 尾随字边界
  • .* - 高达字符串的末尾任何字符。

我不确定您使用的是哪种语言,但是如果它支持lookaround,则可以声明左侧有-(破折号)。

(?<=-)\d+ 

参见:https://regex101.com/r/sI9zR9/1

+0

RE2正则表达式库不支持lookarounds。即使是前瞻('(?!...)') –