在Google工作表中使用REGEXMATCH进行过滤,以过滤掉单元格中包含的文本

时间:2019-10-08 09:00:34

标签: regex google-sheets filter google-sheets-formula textjoin

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

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

enter image description here

但是我不能对两个以上的单元格进行正则表达式匹配,例如,由于无法解析,所以似乎无法在单元格之间进行管道传输,我尝试在“ C3 | C4”中添加”。

enter image description here

enter image description here

我想要的想要的输出如下,但是我只能用硬编码来编码不是我想要的文本。我希望我有一些技巧可以对多个单元格中的文本进行正则匹配,以便可以对C3(Apple)和C4(Pear)单元格中的文本进行正则匹配,并显示所需的输出。

enter image description here

2 个答案:

答案 0 :(得分:1)

您可以使用

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

或者,您可以走得更远,使用Apple字边界和围绕替代方案的分组结构,将Pear\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怎么说:

  

将多个字符串和/或数组中的文本组合在一起,并用指定的分隔符分隔不同的文本。

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

测试:

enter image description here

答案 1 :(得分:1)

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

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

0