Как я могу использовать функцию regexextract в таблицах Google Docs, чтобы получить "все" вхождения строки?

Моя текстовая строка находится в ячейке D2:

Decision, ERC Case No. 2009-094 MC, In the Matter of the Application for Authority to Secure Loan from the National Electrification Administration (NEA), with Prayer for Issuance of Provisional Authority, Dinagat Island Electric Cooperative, Inc. (DIELCO) applicant(12/29/2011)

Эта функция:

=regexextract(D2,"\([A-Z]*\)")

будет захватывать (NEA), но не (DIELCO)

Я хотел бы, чтобы он извлекал обе (NEA) и (DIELCO)

Ответ 1

Вы можете использовать группы захвата, что приведет к возврату массива regexextract(). Вы можете использовать это как результат ячейки, и в этом случае вы получите ряд результатов, или вы можете передать массив другой функции, чтобы переформатировать ее в вашу цель. Например:

regexextract( "abracadabra" ; "(bra).*(bra)" )

вернет массив:

{bra,bra}

Другим подходом было бы использовать regexreplace(). Это имеет то преимущество, что замена является глобальной (например, s/pattern/replacement/g), поэтому вам не нужно заранее знать количество результатов. Например:

regexreplace( "aBRAcadaBRA" ; "[a-z]+" ; "..." )

вернет строку:

...BRA...BRA

Ответ 2

Вот два решения, в которых используются конкретные термины в примере автора, а другой расширяется по шаблону регулярного выражения образца автора, который, как представляется, соответствует всем условиям ALLCAPS. Я не уверен, что нужно, поэтому я дал оба.

(Поместите блок текста в A1)

Общее решение для всех слов в ALLCAPS

=regexreplace(regexreplace(REGEXREPLACE(A1,"\b\w[^A-Z]*\b","|"),"\W+","|"),"^\||\|$","")

Результат:

ERC|MC|NEA|DIELCO

Примечание: основная часть работы находится в формуле CAPITALIZED, функции нижнего регистра предназначены только для очистки.

Если вы хотите разделить пространство, формула немного проще:

=trim(regexreplace(REGEXREPLACE(A1,"\b\w[^A-Z]*\b"," "),"\W+"," "))

Результат:

ERC MC NEA DIELCO

(Один из способов, которым я люблю играть с регулярным выражением в электронных таблицах Google, - это прочитать шаблон регулярных выражений из другой ячейки, чтобы я мог изменить его, не редактируя и не повторно вставляя во все ячейки с помощью этого шаблона. Это выглядит так:

Ячейка A1:

Block of text

Ячейка B1 (без кавычек):

\b\w[^A-Z]*\b

Формула, в любой ячейке:

=trim(regexreplace(REGEXREPLACE(A1,B$1," "),"\W+"," "))

Закрепив его до B $1, я могу заполнить все мои строки сразу, и ссылка не будет увеличиваться.)


Предыдущий ответ:

Конкретное решение для выбранных терминов (ERC, DIELCO)

=regexreplace(join("|",IF(REGEXMATCH(A1,"ERC"),"ERC",""),IF(REGEXMATCH(A1,"DIELCO"),"DIELCO","")),"(^\||\|$)","")

Результат:

ERC|DIELCO

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

Эта формула найдет любые ERC или DIELCO или оба в блоке текста. Начальный порядок не имеет значения, но на выходе всегда будет ERC, за которым следует DIELCO (порядок появления теряется). Это устраняет недостаток с предыдущим ответом, используя "(бюстгальтер). * (Бюстгальтер)" в этой изолированной ERC или DIELCO все еще можно сопоставить.

Это также имеет более простую форму с пространственным разделением:

=trim(join(" ",IF(REGEXMATCH(A1,"ERC"),"ERC",""),IF(REGEXMATCH(A1,"DIELCO"),"DIELCO","")))

Результат:

ERC DIELCO