【问题标题】:Regext for the following以下的正则表达式
【发布时间】:2017-07-06 10:20:28
【问题描述】:

我将使用正则表达式从谷歌表格中提取以下结果

如果我有以下 2 个字段项:

S01_123_123_123

S02_1_123_123_123

我要提取

S01

S02_1

我尝试了以下公式:

=iferror(sort(unique(arrayformula(REGEXEXTRACT(Sheet!A$2:A,"^(.*?)_"))))) 这给出了:

S01

S02

=iferror(sort(unique(arrayformula(REGEXEXTRACT(Sheet!A$2:A,"^z.*?_")))))

S01_

S02_

现在没有想法了。我什至尝试过使用 and OR "|" 进行非分组 (?:_)但这似乎没有任何作用。

【问题讨论】:

  • 试试^(.*?)(?:_[^_]+){3}$
  • 您可以使用=REGEXREPLACE(A1,"_\d{3}","") 将“提取”放入相邻的单元格中

标签: regex google-sheets formula


【解决方案1】:

你可以使用

^(.*?)(?:_[^_]+){3}$

捕获括号内的部分将由REGEXEXTRACT 函数返回。

模式详情

  • ^ - 字符串开头
  • (.*?) - 由于*? 是一个惰性量词,因此任何 0+ 字符都尽可能少
  • (?:_[^_]+){3} - 恰好连续出现三个
    • _ - 下划线
    • [^_]+ - 除了_ 之外的一个或多个符号
  • $ - 字符串结束。

【讨论】:

    【解决方案2】:

    感谢 Wiktor,您的解决方案奏效了。

    ^(.*?)(?:_[^_]+){3}$
    

    如果您愿意解释一下它是如何工作的

    【讨论】:

    • 您应该已将其添加为评论。请删除答案,我会添加答案。
    • 请考虑接受我的回答。如果还有什么不清楚的地方,请通过评论告诉我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多