Google sheets 正则表达式从数组的一行中提取多个值

Google sheets 正则表达式从数组的一行中提取多个值,google-sheets,Google Sheets,我有一张产品表 Product Vegetable Soup Meat Fish 我有一个项目清单: Item Fish and Vegetable Soup meat soup Fish and Vegetable 现在我想通过正则表达式函数从上面提取每个匹配项 我想这会很简单 {=REGEXEXTRACT(A2,TEXTJOIN('|', TRUE,PRODUCTS!A2:A))} 但是,这将不返回任何匹配项或仅返回列表中的第一个匹配项 目标产出: Item

我有一张产品表

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是我的产品列表

谢谢

找到了答案:

简短版本:

=TEXTJOIN(“,”,TRUE,ARRAYFORMULA(IFERROR(REGEXEXTRACT(SPLIT(D4,”,TRUE),TEXTJOIN(“|”),TRUE,A2:A)),”)

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

首先,我们使用
split
并用空格
''

=拆分(A2,”)

这给了我们

我们将其包装在一个
ArrayFormula
中,根据google的帮助函数:

允许显示从数组公式返回的值 多行和/或多列以及与 阵列

下一步是使用
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)),”)