【问题标题】:Why is REGEXEXTRACT returning a single value when it is expected to return an array of 1 row and multiple columns?为什么 REGEXEXTRACT 应该返回一个包含 1 行和多列的数组时返回单个值?
【发布时间】:2017-03-16 05:32:35
【问题描述】:

Google 电子表格中的矩阵管理功能非常方便,并且与处理正则表达式(如 REGEXMATCH 和 REGEXEXTRACT 等)的功能相结合,使其特别有用。

我有一个案例,我不知道什么是由于没有给出预期结果。这是我正在尝试做的事情:

电子表格设置
区域设置:墨西哥,使用.(点)作为小数分隔符。

参赛作品
A1:abcde

公式
B1:=ArrayFormula(REGEXEXTRACT(A1,{".{1}",".{2}"}))

预期结果
B1:a
B2:ab

获得的结果
B1:a
B2:

已知的解决方法
=ArrayFormula(TRANSPOSE(REGEXEXTRACT(A1,{".{1}";".{2}"})))

这个问题也已经发布在西班牙语网站上 -> https://es.stackoverflow.com/q/55704/65

【问题讨论】:

标签: regex google-sheets array-formulas google-sheets-formula


【解决方案1】:

REGEXEXTRACT Array Mysteriously Stopped Working Today (Google Docs Help Forum) 中引用 Jean-Pierre Verhulst 的类似案例:

团队很清楚这个问题,应该很快就会修复。


巧合的是,它发布于 2017 年 1 月 4 日,同一天 AdamL 将他的答案修改为 ARRAYFORMULA() does not work with SPLIT(),解释说:

REGEXEXTRACT 似乎不再支持第二个参数的数组。



我们可以得出结论,ArrayFormula 中的这种行为是由于 Google 表格中的修改,允许在数组公式中进行 SPLIT,结果 REGEXEXTRACT 不接受多列作为正则表达式中的输入。

这可能是因为 REGEXEXTRACT 在正则表达式中有多个捕获组,会产生一个水平数组,每个组一个单元格。将数组作为参数,行为可能是未定义的,但这对我来说是显而易见的。

【解决方案2】:

您在特定公式中没有看到预期结果的原因是您使用 arrayformula 和 regexextract 的顺序 - 您需要修改正则表达式语法以提取 2 个组,或者您需要创建一个数组来分隔每个正则表达式提取函数。

有几种方法可以做到这一点,一种方法是创建一个文字数组并指定 2 个提取模式:

={REGEXEXTRACT(A1,"^."),REGEXEXTRACT(A1,"^.{2}")}

另一种是创建 2 个捕获组,只有第二个默认情况下以相反的顺序返回,但您可以通过 sort() 轻松交换:

=REGEXEXTRACT(A1,"^((.).)")

【讨论】:

  • 这很有帮助 b/c 分享了其他解决方法,但我不确定是否接受这个答案 b/c 它没有解释公式/正则表达式是否有错误(用户端) 或者如果 REGEXEXTRACT 实现存在问题(Google 端)
  • 已更新 - 我相信它更符合您嵌套函数的顺序
猜你喜欢
  • 1970-01-01
  • 2018-11-09
  • 2015-07-09
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-11
相关资源
最近更新 更多