Я использую комбинацию ArrayFormula и FILTER, чтобы перечислить все ячейки в столбце, содержащие все слова поискового запроса. Я использую REGEXMATCH, а не QUERY / CONTAINS / LIKE, потому что мой ФИЛЬТР имеет другие критерии, которые возвращают ИСТИНА / ЛОЖЬ.
Кажется, моя проблема в приоритете. Таким образом, следующее регулярное выражение работает ограниченным образом.
=ArrayFormula(filter(A1:A5,regexmatch(A1:A5,"(?i)^"&"(.*?\bbob\b)(.*?\bcat\b)"&".*$")))
Он найдет Боба и кота, но только если Боб опережает кота.
Таблицы Google не работают, если я пытаюсь использовать опережающий просмотр? = Т.е.
=ArrayFormula(filter(A1:A5,regexmatch(A1:A5,"(?i)^"&"(?=.*?\bbob\b)(?=.*?\bcat\b)"&".*$")))
Я не хочу использовать "|" чередование в строке (повторение и обратное), так как входных слов может быть намного больше, чем двух, поэтому чередование становится экспоненциально более сложным.
Вот тестовый поисковый массив (каждая строка - это отдельная ячейка, содержащая строку) ...
Bob ate the dead cat
The cat ate live bob
No cat ate live dog
Bob is dead
Bob and the cat are alive
... и желаемых результатов я добиваюсь.
Bob ate the dead cat
The cat ate live bob
Bob and the cat are alive
Как только я разберу регулярное выражение, окончательным решением будет текстовое поле для ввода пользователем, где они просто вводят слова, которые должны быть найдены в строке, например «Кот Боб». Эту строку ввода, я думаю, я могу распаковать в отдельные слова и объединить с приведенным выше выражением, однако, если есть «лучший практический» способ сделать это, я бы хотел услышать.