gpt4 book ai didi

Regexmatch 查找匹配多个单词的所有字符串单元格

转载 作者:行者123 更新时间:2023-12-05 01:44:53 27 4
gpt4 key购买 nike

我正在使用 ArrayFormula 和 FILTER 组合列出包含所有搜索词的列中的所有单元格。我使用的是 REGEXMATCH 而不是 QUERY/CONTAINS/LIKE,因为我的 FILTER 具有返回 TRUE/FALSE 的其他条件。

我的问题似乎是优先级。因此,以下正则表达式的工作方式有限。

=ArrayFormula(filter(A1:A5,regexmatch(A1:A5,"(?i)^"&"(.*?\bbob\b)(.*?\bcat\b)"&".*$")))

它会找到 Bob 和 cat,但前提是 Bob 在 cat 之前。

如果我尝试使用 lookahead,Google 表格会失败?= ie

=ArrayFormula(filter(A1:A5,regexmatch(A1:A5,"(?i)^"&"(?=.*?\bbob\b)(?=.*?\bcat\b)"&".*$")))

我不想使用'|'字符串中的交替(重复和反向),因为输入的单词可能多于两个,因此交替变得更加复杂。

这是测试搜索数组(每一行都是一个包含字符串的单元格)...

Bob ate the dead cat
The cat ate live bob
No cat ate live dog
Bob is dead
Bob and the cat are alive

...以及我想要的结果。

Bob ate the dead cat
The cat ate live bob
Bob and the cat are alive

一旦我整理好正则表达式,最终的解决方案将是一个用户输入文本框,他们只需在其中输入必须在字符串中找到的单词,即“Bob cat”。这个输入字符串我想我可以解压缩成它单独的单词并连接到上面的表达式,但是,如果有这样做的“最佳实践”方法我想听听。

最佳答案

找到2个字符串

尝试:

=FILTER(A:A,REGEXMATCH(A:A,"(?i)bob.*cat|cat.*bob"))

您不需要使用 ArrayFormula,因为过滤器本身就是数组公式。

  • (?i) - 使搜索不区分大小写
  • bob.*cat|cat.*bob - 匹配“bob→cat”或“cat→bob”

查找多个字符串

比 2 更多的单词有更复杂的公式。

假设我们在 A 列中有一个列表:

Bob ate the dead cat
The cat ate live bob
No cat ate live dog
Bob is dead
Bob and the cat are alive
Cat is Bob
ate Cat bob

并且需要找到3个单词的所有匹配项,将它们放在C列中:

cat
ate
bob

公式为:

=FILTER(A:A,MMULT(--REGEXMATCH(A:A,
"(?i)"&TRANSPOSE(C1:C3)),ROW(间接("a1:a"&COUNTA(C1:C3)))^0)=COUNTA(C1:C3))

它使用转置单词列表 C1:C3RegexMatch,然后 mmult 函数求和匹配和 =COUNTA(C1 :C3) 比较匹配的数量和列表中的单词数量。

结果是:

Bob ate the dead cat
The cat ate live bob
ate Cat bob

关于Regexmatch 查找匹配多个单词的所有字符串单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44292991/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com