为什么 REGEXEXTRACT returning 一个单一的值,而它应该 return 一个 1 行和多列的数组?

Why is REGEXEXTRACT returning a single value when it is expected to return an array of 1 row and multiple columns?

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.whosebug.com/q/55704/65

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

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

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

另一种是创建 2 个捕获组,第二个唯一的问题是默认以相反的顺序返回,但您可以通过 sort():

轻松交换它
=REGEXEXTRACT(A1,"^((.).)")

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

The team is well aware of the issue and a fix should be there soon.


巧合的是,它发表于 2017 年 1 月 4 日,同一天 AdamL modified his answer to ARRAYFORMULA() does not work with SPLIT(),解释说:

REGEXEXTRACT no longer appears to support an array for the second argument.



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

这可能是因为 REGEXEXTRACT 在正则表达式中有多个捕获组,生成一个水平数组,每个组一个单元格。有一个数组作为参数,行为可能是未定义的,但这在我这边是有争议的。