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 |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
并用空格分割每个单元格中的每个项目' '
=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)),"")))
推荐阅读
- python - 通过根据另一列中的条件更改一列中的值返回错误
- javascript - 无法向 webhook 发出 POST 请求
- python - 如何获取文本文件中十六进制数的长度
- flutter - 颤振应用程序在首次启动时不会立即从共享首选项中获取数据
- angular - 角度显示全文按钮打开所有 div 容器
- react-native - 如果数据是通过“Promis”返回的,则每次执行“onEndReached”后,Flastlist 都会移动到顶部
- url - 带有 # 字符的邮递员请求未响应正确的输出
- python - 如何根据主机名每小时计算平均disk_available,python
- amazon-web-services - Jenkins slave 无法通过 yum 安装 java
- django - 重新启动 gunicorn 和 nginx 不会反映拉取请求后的更改