RegEx получает последнее совпадение формата даты из строки внутри ячейки Google Sheets

Моя цель - извлечь строку даты и следующие символы с помощью регулярного выражения в Google Таблицах (функция листов: regexextract), где строка является последней строкой ячейки и начинается с формата даты «гггг-ДД-ММ», за которым следует «:» . Итак, RegExpression, которое у меня сейчас есть, выглядит так: \d{4}-\d{2}-\d{2}:.+

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

Образец ячейки:

2020-05-20: Status update blah blah
2020-05-27: PO Issued blah blah

Запрошенный результат: я хочу, чтобы конечным результатом была строка, начинающаяся с даты и символов, следующих за "2020-05-27: PO Issued blah blah", что является последним результатом. Однако я всегда получаю первое совпадение, которое в приведенном выше примере: «2020-05-20: обновление статуса, бла-бла».

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

Изменить: я обнаружил, что в Таблицах используется RE2, поэтому я полагаю, что это имело значение.


person Freddy    schedule 29.05.2020    source источник
comment
Огромная разница в том, что вы используете RE2. Но попробуйте (?s).*\n(\d{4}-\d{2}-\d{2}:.*), если у вас есть многострочная строка внутри ячейки и вы хотите получить дату, которая находится в начале последней строки. Или (?s).*\n(\d{4}-\d{2}-\d{2}:[^\r\n]*)   -  person Wiktor Stribiżew    schedule 29.05.2020
comment
это должно сделать это REGEXEXTRACT(A1,"(?:.+)(\d{4}-\d{2}-\d{2})")   -  person Maher Fattouh    schedule 29.05.2020
comment
@ WiktorStribiżew то, что вы разместили здесь в комментариях, работает. Огромное спасибо. Я знаю, что вы упомянули, что это дубликат, но другой пост, за которым я следил, не работал, но я не понимал, что в Таблицах используется RE2. Это правильный ответ.   -  person Freddy    schedule 03.06.2020
comment
Да, извините, это было отклонено (не мной, здесь был какой-то ненавистник). Я не совсем понял ваши требования, если вы действительно хотите сопоставить только дату, которая находится в начале последней строки, вопрос не дублируется. Уточните свои требования в вопросе.   -  person Wiktor Stribiżew    schedule 03.06.2020
comment
@ WiktorStribiżew Я пересмотрел свой вопрос и заметил, что надеюсь, что это проясняет, что это другая проблема, чем та, которая помечена как похожая ошибка. Спасибо   -  person Freddy    schedule 03.06.2020


Ответы (1)


Вы можете использовать

=REGEXEXTRACT(A1, "(?m)^\d{4}-\d{2}-\d{2}:.*\z")

См. демонстрацию регулярного выражения RE2 и снимок экрана Google Таблиц:

введите здесь описание изображения

(?m)^\d{4}-\d{2}-\d{2}:.*\z регулярное выражение соответствует

  • (?m) - модификатор MULTILINE, при котором ^ соответствует началу строки, а $ - концу строки
  • ^ - начало строки
  • \d{4}-\d{2}-\d{2}:.* - 4 цифры, -, 2 цифры, -, 2 цифры, :, а затем остальная часть строки, поскольку . по умолчанию не соответствует символам разрыва строки
  • \z - самый конец строки (модификатор (?m) не влияет).

Обратите внимание, что (?s).*\n(\d{4}-\d{2}-\d{2}:.*) Я предложил в верхнем комментарии под вопросом соответствовать последним строкам, начиная с даты, см. демонстрация регулярного выражения.

person Wiktor Stribiżew    schedule 03.06.2020