如何使 Google Sheets REGEXTRACT RegEx 函数做 "greedy" 模式匹配

How to make Google Sheets REGEXTRACT RegEx function do "greedy" pattern matching

我正在尝试从“1.2.3”(即 select 每个数字和最后一个数字组之前的点)在 REGEXEXTRACT sheet 中工作 Google Sheets

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

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

我在 https://regexr.com/ 上测试了它 returns "1.2." 在 https://regex101.com/ 上 returns “1.2.” 作为整个结果,“2.” 作为第 1 组.

但在 Google 工作表 上,它 returns 只有“2.”。

我认为它与以下之一有关:

  1. "ungreedy" REGEXEXTRACT 的评估(这与 Google/re2 规范相反;
  2. 以上加之returns仅第一组;

我尝试了一种方法,以充分利用上面的第 2 项。所以,我将模式更改为 (^([0-9]+\.)+)。 我在 https://regexr.com/ 上测试了它 returns "1.2." 在 https://regex101.com/ 上 returns "1.2." 作为整个结果和第 1 组。 不幸的是,它在 Google Sheets.

中触发了 #REF! 错误

所以,我的问题 - 在 Google 工作表中制作 greedy select 最长可能子串的方法是什么 或另一种方法。

看看这是否有帮助

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

或者,引用包含字符串“1.2.3”的单元格

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

尝试:

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