【问题标题】:How to make Google Sheets REGEXTRACT RegEx function do "greedy" pattern matching如何使 Google Sheets REGEXEXTRACT RegEx 函数进行“贪婪”模式匹配
【发布时间】:2020-06-09 02:24:38
【问题描述】:

我正在尝试构建一个模式以从“1.2.3”中选择“1.2.”(即选择最后一个数字组之前的每个数字和点)在 Google 表格 中使用 REGEXEXTRACT 表格功能。

我想出了^([0-9]+\.)+ 模式,它大概对应于PerlGoogle/re2 规范。所以,我的代码是:

=REGEXEXTRACT("1.2.3";"^([0-9]+\.)+")

我在https://regexr.com/ 上对其进行了测试,它返回“1.2.” 在https://regex101.com/ 上,它返回“1.2.”作为整个结果,“2.”作为第 1 组。

但在 Google 表格 上,它只返回“2.”。

我认为它与以下任何一个有关:

  1. 不贪婪”由REGEXEXTRACT 评估(这与 Google/re2 规范相反;
  2. 上面加上它只返回第一组

我尝试了一种解决方法,以便充分利用上面的第 2 项。因此,我将模式更改为(^([0-9]+\.)+)。 我在https://regexr.com/ 上对其进行了测试,它返回“1.2.” 并在 https://regex101.com/ 上返回“1.2.”作为整个结果和第 1 组。 不幸的是,它会在 Google 表格 中触发 #REF! 错误。

所以,我的问题是什么方法可以在 Google 表格贪婪 选择最长的子字符串或变通方法。

【问题讨论】:

    标签: regex google-sheets google-sheets-formula re2


    【解决方案1】:

    看看有没有帮助

    =regexextract("1.2.3","^([0-9.]+)[^\.]+$")
    

    或者,使用字符串“1.2.3”引用单元格

    =regexextract(A2, "^([0-9.]+)[^\.]+$")
    

    【讨论】:

    • 解决了问题的实际方面。理论上的问题仍然存在 - 为什么 Google 表格不使用(或如何使用)贪婪模式,这是 Google/re2 的默认设置。
    【解决方案2】:

    尝试:

    =REGEXEXTRACT("1.2.3", "^\d+.\d+.")
    

    【讨论】:

    • 我认为这可行;答案可以做一些解释。
    • 谢谢!这适用于我给出的示例。我的实际任务有点困难,编号可以嵌套
    猜你喜欢
    • 2012-06-27
    • 1970-01-01
    • 1970-01-01
    • 2014-07-06
    • 2011-03-02
    • 1970-01-01
    • 2012-11-17
    • 1970-01-01
    相关资源
    最近更新 更多