我使用 ArrayFormula 和 FILTER 组合来列出包含所有搜索词的列中的所有单元格。我使用 REGEXMATCH 而不是 QUERY/CONTAINS/LIKE 因为我的 FILTER 有其他返回 TRUE/FALSE 的条件。
我的问题似乎是优先级。因此以下正则表达式的工作方式有限。
=ArrayFormula(filter(A1:A5,regexmatch(A1:A5,"(?i)^"&"(.*?\bbob\b)(.*?\bcat\b)"&".*$")))
Run Code Online (Sandbox Code Playgroud)
它会找到 Bob 和 cat,但前提是 Bob 先于 cat。
如果我尝试使用lookahead ?= ie,Google 表格会失败
=ArrayFormula(filter(A1:A5,regexmatch(A1:A5,"(?i)^"&"(?=.*?\bbob\b)(?=.*?\bcat\b)"&".*$")))
Run Code Online (Sandbox Code Playgroud)
我不想使用“|” 字符串中的交替(重复和反向),因为输入单词可能多于两个,因此交替变得更加复杂。
这是测试搜索数组(每行都是包含字符串的单个单元格)...
Bob ate the dead cat
The cat ate live bob
No cat ate live dog
Bob is dead
Bob and the cat are alive
Run Code Online (Sandbox Code Playgroud)
...以及我想要的结果。
Bob ate the dead cat
The cat ate live bob
Bob and the cat are alive
Run Code Online (Sandbox Code Playgroud)
一旦我整理好正则表达式,最终的解决方案将是一个用户输入文本框,他们只需输入必须在字符串中找到的单词,即“Bob cat”。我想我可以将这个输入字符串解压成单独的单词并连接到上面的表达式,但是,如果有一种“最佳实践”方法可以做到这一点,我想听听。