#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, ответ теперь должен быть обновлен с фиксированной формулой и объяснением логики. Также включены последние предоставленные вами данные.