Таблицы Google с регулярным выражением соответствуют датам, которые имеют разное количество цифр для дня и месяца.

В таблицах Google я хотел бы иметь возможность извлекать даты из текстовой ячейки. Я нашел решение в RegEx получает последнее совпадение формата даты из строки внутри ячейки Google Таблиц, но не учитывает, что мои даты не отформатированы одинаково. У них может быть 1 или 2 цифры для дня, затем 1 или 2 для месяца и 2 или 4 для года.

Я адаптировал приведенное выше решение для поиска нескольких цифр с помощью d {1,}:

"(?:.+)(\d{1,}-\d{1,}-\d{2,})" но если день состоит из 2 цифр, первая цифра отваливается

1-8-2018 ru 1-2-2019 результаты - ›1-2-2019
26-3-19 ru 23-4-2019 результаты -› 3-4-2019
1-1- 20 из 8-2-20 и 12-10-20 - ›2-10-20‹ ›

Кажется, это нормально работает в течение месяца и года, но не для дня, как мне это решить?

Бонусный вопрос: в основном в ячейке 2 даты, иногда в будущем может быть еще 3, может быть, больше. Я хотел бы иметь возможность выбрать, какая из дат возвращается. Сейчас выбирается последняя дата. Есть ли способ сначала подсчитать количество совпадений, а затем выбрать одно?


person Jeroen    schedule 23.10.2020    source источник
comment
Можете ли вы опубликовать лист или его копию, чтобы воспроизвести проблему?   -  person Kessy    schedule 23.10.2020
comment
Помните, что в соответствии с правилами сайта, когда ответ касается вашего вопроса, принять его и даже проголосовать за него, чтобы другие тоже могли получить пользу.   -  person marikamitsos    schedule 24.10.2020


Ответы (1)


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

^(?:.*?(\d{1,2}-\d{1,2}-\d{2}(?:\d{2})?)){2}

См. демонстрацию регулярных выражений. Это выберет вторую дату в каждой строке из-за ограничивающего квантификатора {2} в конце. Отрегулируйте число лимита до нужного вам.

Подробности

  • ^ - начало строки
  • (?: - start of a non-capturing group (used to group patterns to be quantified here)
    • .*? - any 0+ chars other than line break chars, as few as possible (*? is non-greedy)
    • (\d{1,2}-\d{1,2}-\d{2}(?:\d{2})?) - Группа 1 (фактический вывод): одна или две цифры, -, одна или две цифры, -, две цифры и затем необязательный фрагмент из двух цифр
  • ){2} - конец группы без захвата, совпадение двух вхождений
person Wiktor Stribiżew    schedule 23.10.2020