Соответствующие группы регулярных выражений, начиная с конца - PullRequest
0 голосов
/ 01 мая 2020

У меня могут быть следующие строки:

20200124 (year-month-day)
202001   (year-month)
0124     (month-day)
24       (day)

Я пытаюсь найти регулярное выражение, чтобы можно было сопоставить все вышеперечисленные строки на основе групп захвата. Мое регулярное выражение:

^(?<year>\d{4})?(?<month>\d{2})?(?<day>\d{2})$

Примечание: до сих пор я не рассматривал какой-либо тип проверки для введенной строки, в настоящее время я заинтересован в их правильном сопоставлении.

Есть некоторые проблемы с регулярное выражение, поскольку оно не соответствует правильно во всех случаях.

Например: 20200124 сопоставляется правильно, в то время как 202001 также совпадает, но 01 сопоставляется в группе day вместо группы month. Или 2020 соответствует month и day группе

Я не уверен, возможно ли сопоставить все перечисленные выше возможности только с одним регулярным выражением?

1 Ответ

0 голосов
/ 01 мая 2020

Я бы сказал, что регистр год-месяц делает все возможности нерегулярными, и я бы проанализировал строку вручную. Вы не указали язык программирования, поэтому это псевдокод:

if date.length = 6 then
    month = date.right(2)
    year = date.left(4)
else
    day = date.right(2)
    month = date.substring(date.length-4, date.length-2)
    year = date.substring(date.length-8, date.length-6)
end

+ / - 1, где это необходимо. В зависимости от реализации подстроки вам может потребоваться добавить дополнительные проверки длины строки.

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