在 Google sheet 中使用 REGEXMATCH 过滤以过滤掉单元格中包含的文本

Filter with REGEXMATCH in Google sheet to filter out containing text in cells

现在我有这些数据,我正在尝试过滤掉单元格 C3、C4 等中包含的数据

我没有问题过滤 1 个单元格的正则表达式匹配数据,如下所示

但是我无法像这样对超过 2 个单元格进行正则表达式匹配,例如,我似乎无法在单元格之间建立管道,因为我会遇到解析错误,我尝试添加 "C3|C4"也是。

我想要的输出如下,但我只能对包含的文本进行硬编码,而这不是我要查找的内容。我希望我能有一些技巧来对超过 1 个单元格中的文本进行正则表达式匹配,以便它可以对单元格 C3(Apple) 和 C4(Pear) 中的文本进行正则表达式匹配并显示所需的输出。

您可以使用

=IF(C3<>"", FILTER(A2:A,REGEXMATCH(A2:A, TEXTJOIN("|", TRUE, C3:C4) )), "no input")

或者,您可以更进一步,将 ApplePear 作为整个词使用 \b 词边界和围绕替代项的分组结构进行匹配:

=IF(C3<>"", FILTER(A2:A,REGEXMATCH(A2:A, "\b(?:" & TEXTJOIN("|", TRUE, C3:C4) & ")\b")), "no input")

如果您需要使搜索不区分大小写,只需在开头附加(?i)

=IF(C3<>"", FILTER(A2:A,REGEXMATCH(A2:A, "(?i)\b(?:" & TEXTJOIN("|", TRUE, C3:C4) & ")\b")), "no input")

看看 TEXTJOIN documentation 是怎么说的:

Combines the text from multiple strings and/or arrays, with a specifiable delimiter separating the different texts.

因此,当您将 TRUE 作为第二个参数传递时,您不必担心该范围是否包含空单元格,并且正则表达式不会被无关的 ||| 破坏。

测试:

您需要对 C 列中的动态列表使用 TEXTJOIN

=IF(TEXTJOIN( , 1, C3:C)<>"", FILTER(A2:A, REGEXMATCH(LOWER(A2:A), 
 TEXTJOIN("|", 1, LOWER(C3:C)))), "no input")