как извлечь строку между разными символами, возможные повторяющиеся предложения в одной строке? С помощью функции регулярного извлечения Google sheets

#regex #google-sheets

#регулярное выражение #google-sheets

Вопрос:

Примеры с 3 сценариями.

 67fa9,extract this text;

f19b,extract this text,and this text with the comma or with out;

;f19b,extract this text,and this text with the previous comma or with out;;f4241c,extract this text which may contain a integer from 0-9;
 

Я попробовал РЕГУЛЯРНОЕ ИЗВЛЕЧЕНИЕ (A2,»,.*?;»). однако это не работает для всех сценариев в столбце A.

смотрите прикрепленный фрагмент ожидаемого результата. введите описание изображения здесь

Комментарии:

1. поделитесь копией своего листа

2. включите ожидаемый результат, чтобы мы могли воспроизвести то, что вы хотите.

Ответ №1:

Я использовал ваши примеры выше и извлек текст, который вы описали.

Пожалуйста, посмотрите Результат ниже, если он соответствует вашему ожидаемому результату:

пример вывода

Я использовал эту формулу для всех ячеек (регулярное выражение немного грубое, но выполняет работу для всех упомянутых вами экземпляров):

=REGEXREPLACE(REGEXEXTRACT(<cell>, ";?w ,([ws] [,ws] ;?s?;?[w*]?[[,ws-] ]?);?"), ";s;w*,", ",")

Что я сделал, так это извлек все, а затем заменил выходные данные, на которые вы не указали REGEXREPLACE .

Итак, чтобы объяснить регулярное выражение, первое ";?w ,([ws] [,ws] ;?s?;?[w*]?[[,ws-] ]?);?"

Как вы можете видеть, шаблон внутри круглых скобок () — единственный, который мы извлекаем.

";?w , — соответствует этим шаблонам ;3f7f4de0, , которые вы можете удалить ? , если уверены, что в начале всегда есть точка с запятой, я добавил это из-за ваших предыдущих примеров. ? означает символ до того, как он может быть там или нет, что является ;

[ws] — предложение перед первым , , только w (ловит буквы, цифры) и s (пробелы).

[,ws] — предложение после первого , (это похоже на предыдущее, но теперь включает , , поэтому оно получает последовательные предложения, где есть , в середине)

;?s?;?[w*]? — соответствует этим шаблонам ; ;3f7f4de0, , которые вы найдете в средней части (я использовал ? , поскольку у вас могут быть случаи, когда в середине только одна точка с запятой или пробел отсутствует, по крайней мере, это все равно их поймает. Вы можете видеть много ? , поскольку они приходят и уходят.)

[[,ws-] ]?);? — соответствует последнему предложению после последнего ,

Раньше я REGEXREPLACE удалял тот, который мы поймали в середине ; ;3f7f4de0, . Поскольку, если мы разделим REGEXEXTRACT , он будет выводиться в 2 ячейки. Раньше я REGEXREPLACE заменял ненужную строку посередине.

";s;w*," — уловить шаблон ; ;3f7f4de0,

"," ; ;3f7f4de0, заменить просто ,

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

Комментарии:

1. Спасибо, это решило проблему. можете ли вы уточнить логику решения, если это возможно. или как вы решили проблему.

2. привет @TAHIR, рад, что у тебя получилось. В любом случае, я обновил свой ответ, поскольку ваши 2 точки с запятой имеют пробелы между ними, сообщение выше должно быть обновлено. будет введена логика, лежащая в основе этого сообщения. обновит вас, как только эта логика будет добавлена

3. @TAHIR, ответ теперь должен быть обновлен с фиксированной формулой и объяснением логики. Также включены последние предоставленные вами данные.