Вместо использования регулярных выражений обычно лучше проанализировать строку как datetime.datetime
объект:
In [140]: datetime.datetime.strptime("11/12/98","%m/%d/%y")
Out[140]: datetime.datetime(1998, 11, 12, 0, 0)
In [141]: datetime.datetime.strptime("11/12/98","%d/%m/%y")
Out[141]: datetime.datetime(1998, 12, 11, 0, 0)
Затем вы можете получить доступ к дню, месяцу и году (а также часам, минутам и секундам) в качестве атрибутов объекта datetime.datetime
:
In [143]: date.year
Out[143]: 1998
In [144]: date.month
Out[144]: 11
In [145]: date.day
Out[145]: 12
Чтобы проверить, соответствует ли последовательность цифр, разделенных прямой косой чертой, допустимой дате, вы можете использовать блок try..except
. Неправильные даты будут повышать ValueError
:
In [159]: try:
.....: datetime.datetime.strptime("99/99/99","%m/%d/%y")
.....: except ValueError as err:
.....: print(err)
.....:
.....:
time data '99/99/99' does not match format '%m/%d/%y'
Если вам нужно найти более длинную строку для даты,
Вы можете использовать регулярные выражения для поиска цифр, разделенных косой чертой:
In [146]: import re
In [152]: match = re.search(r'(\d+/\d+/\d+)','The date is 11/12/98')
In [153]: match.group(1)
Out[153]: '11/12/98'
Конечно, недопустимые даты также будут совпадать:
In [154]: match = re.search(r'(\d+/\d+/\d+)','The date is 99/99/99')
In [155]: match.group(1)
Out[155]: '99/99/99'
Чтобы проверить, что match.group(1)
возвращает правильную строку даты, вы можете затем проанализировать ее, используя datetime.datetime.strptime
, как показано выше.