【问题标题】:Filter with REGEXMATCH in Google sheet to filter out containing text in cells在 Google 工作表中使用 REGEXMATCH 过滤以过滤掉单元格中包含的文本
【发布时间】:2020-02-05 13:15:54
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    你可以使用

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

    或者,您可以更进一步,使用\b 单词边界和围绕备选方案的分组结构将ApplePear 匹配为整个单词:

    =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 作为第二个参数传递时,您不必担心该范围是否包含空单元格,并且正则表达式不会被无关的||| 破坏。

    测试:

    【讨论】:

    • 哦!我不知道你可以使用 C3 & "|" C4 而不仅仅是 C3|C4,这回答了我的问题!但是,如果我有更多单元格要过滤,我会在其中添加更多行,例如 =IF(C3"", FILTER(A2:A,REGEXMATCH(A2:A,C3&"|"&C4&"| ",&C5)),"no input") 通过添加更多类似 C5、C6、C7 等
    • @Lyber 好的,我用更通用的方法编辑了答案。使用JOIN("|", C3:C4)
    • 谢谢!使用连接公式,一切看起来都更加整洁。从那里我发现 TEXTJOIN 也可以忽略空格
    • @Lyber 我通过文档链接将该位添加到答案中。此外,正如我看到的那样,我添加了一个不区分大小写的变体。
    【解决方案2】:

    C 列的动态列表需要使用TEXTJOIN

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

    【讨论】:

    猜你喜欢
    • 2021-09-06
    • 1970-01-01
    • 2021-10-09
    • 2020-06-06
    • 2021-10-19
    • 2015-11-01
    • 1970-01-01
    • 2022-06-20
    • 1970-01-01
    相关资源
    最近更新 更多