RegexExtract несколько значений из одной строки из массива - PullRequest
1 голос
/ 16 апреля 2020

У меня есть таблица продуктов

Product
Vegetable
Soup
Meat
Fish

У меня есть список элементов:

Item
Fish and Vegetable Soup
meat soup
Fish and Vegetable

Теперь я хочу извлечь каждое совпадение сверху с помощью функции регулярных выражений

Я думал, что это будет так же просто, как

{=REGEXEXTRACT(A2,TEXTJOIN('|', TRUE,PRODUCTS!A2:A))} 

, однако это не возвращает ни одного, или только первое совпадение в моем списке.

целевой вывод:

Item                    |Expected Output
Fish and Vegetable Soup |Fish, Vegetable, Soup
meat soup               |Meat, Soup
Fish and Vegetable      |Fish, Vegetable

демонстрационный лист здесь

, учитывая, что D2 - это текст, на котором я хочу использовать выражение, и A2: А это мой список продуктов.

Спасибо!

1 Ответ

2 голосов
/ 16 апреля 2020

Разобрался:

Короткая версия:

=TEXTJOIN(", ",TRUE,ARRAYFORMULA(IFERROR(REGEXEXTRACT(SPLIT(D4," ",True),TEXTJOIN("|",TRUE,A2:A)),"")))

, так как функция regexextract заканчивается после первого совпадения, нам нужно сделать следующее, чтобы он перебирает мою строку.

сначала мы используем split и разбиваем каждый элемент в каждой ячейке по пробелам ' '

=split(A2, " ")

, что дает нам

Split Array

Обертываем это в ArrayFormula, что в соответствии с вспомогательной функцией Google:

Включает отображение значений, возвращаемых из Формула массива в несколько строк и / или столбцов и использование не массивных функций с массивами

Следующим шагом является использование функции regextract, с помощью ArrayFormula позволяет нам соответствует каждому элементу, возвращенному из split

=ARRAYFORMULA(REGEXEXTRACT(SPLIT(B2, " "),TEXTJOIN("|", TRUE, A2:A)

textjoin возвращает одну ячейку со значениями, разделенными выбранным разделителем | в некоторых языках программирования | является оператором OR что дает нам.

enter image description here

, чтобы завершить его, мы используем IFERROR s Приказ игнорировать #NAs нас это не волнует. и еще TEXTJOIN, чтобы привести все это в одну ячейку, разделенную запятой.

=TEXTJOIN(", ",TRUE,ARRAYFORMULA(IFERROR(REGEXEXTRACT(SPLIT(D2," ",True),TEXTJOIN("|",TRUE,A2:A)),"")))

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...