Извлечь все совпадения в соседнюю ячейку столбца в Google Sheets - PullRequest
0 голосов
/ 03 февраля 2019

Вопрос : ищется регулярное выражение в Google Sheets, которое фиксирует все вхождения строки между [t- ] и выводит в соседнюю ячейку столбца в виде массива, или в качестве другого разделителя между совпадениями.* Для следующей строки я пытаюсь извлечь все экземпляры текста между [t- ].

A1:

Lorem Ipsum [t- это просто] фиктивный текст [t-printing] и набор текста [c- industry], поэтому [d- это имело бы] смысл, что

Ожидаемый результат представляет собой массиввсе вхождения в одном столбце:

B1:

[просто, печать]

В качестве результата может быть любой разделитель совпадений вхождения

это просто |печать

Попытка выполнить следующее с одним текстом в пределах [t- ] работает нормально, но для нескольких экземпляров извлекает все между открытым [t- первого вхождения и ] последнего вхождения:

=REGEXEXTRACT(A1,"\[t- (.*)\]")

Ведущий к:

просто]!фиктивный текст [t-printing

Я также пробовал несколько групп захвата, но это работает, только если я уверен, что между [t- ] есть только два экземпляра текста - может быть n экземпляров на строку.Также он не выводит результаты в массив в одном столбце, но распространяется по нескольким столбцам:

=regexextract(A1, "(\[t- (.*)\]).*(\[t- (.*)\])" )


РЕДАКТИРОВАТЬ : я получилпара отвечает с помощью Regex, который работает для других инструментов / языков (например, PHP или Javascript), но не для Google Sheets.Вот синтаксис Google Sheets Regex .

РЕДАКТИРОВАТЬ 2 : в приведенном выше примере строки в скобках есть другой текст, отмеченный другими буквами, например, [c- industry] и [d- it would make].Они должны быть включены , а не .Только текстовое сообщение в [t- ] (с "t-") должно быть возвращено.

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

пуленепробиваемый раствор:

="["&JOIN(", ", ARRAYFORMULA(REGEXREPLACE(
 QUERY(SPLIT(TRANSPOSE(SPLIT(A1, "[")), "]"), 
 "select Col1 where Col1 contains 't- '", 0), 
 "t- ", "")))&"]"

__________________________________________________________

=JOIN(" | ", ARRAYFORMULA(REGEXREPLACE(
 QUERY(SPLIT(TRANSPOSE(SPLIT(A1, "[")), "]"), 
 "select Col1 where Col1 contains 't- '", 0), 
 "t- ", "")))

0 голосов
/ 04 февраля 2019

Аналогично используемой технике здесь ,

  • REGEXREPLACE все [t-.*] до (.*)
  • Укажите полученное выражение сверху какрегулярное выражение REGEXEXTRACT
  • \Q..\E используется для экранирования других символов

    =REGEXEXTRACT(A1, "\Q"&REGEXREPLACE(A1,"\[t-[^]]+\]","\\E(.*)\\Q")&"\E")
    

В качестве альтернативы, с помощью REGEXREPLACE для разделения,

=REGEXREPLACE(A1,"(^|\])(.*?)(\[t-|$)","$1|$3")
=SPLIT(REGEXREPLACE(A1,"(^|\])(.*?)(\[t-|$)","$1|$3"),"|")

Заменить все символы .*, которые

  • Начать с ] или с начала строки ^
  • Завершить с [t- иликонец строки $

с ]|[t-

...