在 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")
或者,您可以更进一步,将 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 是怎么说的:
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")
现在我有这些数据,我正在尝试过滤掉单元格 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")
或者,您可以更进一步,将 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 是怎么说的:
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")