【问题标题】:RegEx to match 2 or more digits in a string正则表达式匹配字符串中的 2 个或多个数字
【发布时间】:2016-11-18 12:00:37
【问题描述】:

假设我有这样的字符串:

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)位数字,但我需要排除单个数字。

【问题讨论】:

  • =REGEXREPLACE(B2,"[0-9]{2,4}$","")
  • 这行得通 - 谢谢 - 但我添加了新信息。字符串末尾不需要我需要的数字...
  • 试试=REGEXEXTRACT\b[0-9]{2,4}\b: =REGEXEXTRACT(B2, "\b[0-9]{2,4}\b")
  • @Wiktor 效果很好 - 谢谢!

标签: regex google-sheets google-spreadsheet-api re2


【解决方案1】:

您可以将=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 - 词尾边界
  • .* - 直到字符串结尾的任何字符。

【讨论】:

    【解决方案2】:

    我不确定您使用哪种语言,但如果它支持环视,您可以断言左侧有一个 -(破折号)。

    (?<=-)\d+
    

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

    【讨论】:

    • RE2 正则表达式库不支持环视。甚至是前瞻 ((?!...))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-16
    • 1970-01-01
    • 2014-10-11
    • 1970-01-01
    • 2015-09-02
    • 2012-05-04
    • 1970-01-01
    相关资源
    最近更新 更多