首页 > 解决方案 > 正则表达式从数组的单行中提取多个值

问题描述

我有一张产品表

Product
Vegetable
Soup
Meat
Fish

我有一个项目清单:

Item
Fish and Vegetable Soup
meat soup
Fish and Vegetable

现在我想通过正则表达式函数从上面提取每个匹配项

我以为它会像

{=REGEXEXTRACT(A2,TEXTJOIN('|', TRUE,PRODUCTS!A2:A))} 

但是,这不会返回或仅返回我列表中的第一个匹配项。

目标输出:

Item                    |Expected Output
Fish and Vegetable Soup |Fish, Vegetable, Soup
meat soup               |Meat, Soup
Fish and Vegetable      |Fish, Vegetable

演示表在这里

假设 D2 是我要在其上使用表达式的文本,而 A2:A 是我的产品列表。

谢谢!

标签: google-sheets

解决方案


弄清楚了:

简洁版本:

=TEXTJOIN(", ",TRUE,ARRAYFORMULA(IFERROR(REGEXEXTRACT(SPLIT(D4," ",True),TEXTJOIN("|",TRUE,A2:A)),"")))

由于regexextract函数在第一次匹配后结束,我们需要执行以下操作以使其遍历我的行。

首先,我们使用split并用空格分割每个单元格中的每个项目' '

=split(A2, " ")

这给了我们

拆分数组

ArrayFormula我们根据谷歌的帮助函数把它包装在一个which 中:

允许将数组公式返回的值显示为多行和/或多列,以及对数组使用非数组函数

下一步是使用该regextract函数,借助ArrayFormula让我们匹配从拆分返回的每个元素

=ARRAYFORMULA(REGEXEXTRACT(SPLIT(B2, " "),TEXTJOIN("|", TRUE, A2:A)

textjoin|在某些编程语言中,返回一个由我们选择的分隔符分隔的值的单元格|是一个 OR 语句,它给了我们。

在此处输入图像描述

最重要的是,我们使用IFERROR声明来忽略#NAs我们不关心的那些。并进一步TEXTJOIN将其全部集中在一个以逗号分隔的单元格中。

=TEXTJOIN(", ",TRUE,ARRAYFORMULA(IFERROR(REGEXEXTRACT(SPLIT(D2," ",True),TEXTJOIN("|",TRUE,A2:A)),"")))

在此处输入图像描述


推荐阅读