Как бороться с подобными форматами даты с помощью регулярных выражений? - PullRequest
1 голос
/ 18 июня 2019

У меня есть два странных диапазона дат:

01.01-02.01.2022
01-02.01.2022

Чтобы извлечь первую дату в обычном формате (01.01.2022), я должен определить обе ситуации с помощью регулярных выражений:

Для 01.01-02.01.2022:

\d{2}\.\d{2}-\d{2}\.\d{2}\.\d{4} 

А для 01-02.01.2022 (также 01-02/01/2022 или 01-02\01\22)

\d{2}-\d{2}[/\.\\]\d{2}[\./\\]\d{2,4}

Проблема 01. 01-02.01.2022 содержит 01-02.01.2022 в нем

Какое регулярное выражение можно использовать для 01.01-02.01.2022, чтобы избежать ситуации, когда формат даты совпадает с обоими выражениями?

Конечно, было бы легко, если бы мои строки начинались с даты. ^ перед выражением может решить мою проблему. Но иногда даты оборачиваются чем-то другим.

1 Ответ

1 голос
/ 18 июня 2019

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

(^|\D\.|[^0-9.])(\d{2}-\d{2}[/.\]\d{2}[/.\]\d{2,4})($|\D)

См. Демоверсию regex . Grab Group 2 value.

Детали

  • (^|\D\.|[^0-9.]) - Группа 1: либо начало строки (^), нецифровый символ и точка (\D\.), либо любой символ, кроме цифры и точки ([^0-9.])
  • (\d{2}-\d{2}[/.\]\d{2}[/.\]\d{2,4}) - Группа 2 (это то, что вам нужно извлечь): 2 цифры, -, 2 цифры, / или . или \, две цифры, / или . или \, две, три или четыре цифры
  • ($|\D) - Группа 3: конец строки ($) или нецифровый символ (\D)

Если вы хотите сопоставить 2 или 4 цифры с \d{2,4}, вы должны заменить их на (\d{4}|\d{2}) или \d{2}(\d{2})?.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...