Всем доброго времени суток.
Возник такой вопрос. Допустим у нас есть строка(и), в которой встречаются даты в разных форматах. Есть необходимость все эти даты распарсить, определив формат.
Написал вот такие грабли. Но они учитывают только 3 формата даты, соответственно нужно потенциально знать все возможные форматы даты, которые в строке могут присутствовать.
# -*- coding: utf-8 -*-
from datetime import datetime
import re
date_string = u'''попробуем распарсить дату из этой строки, начнем с 2014-01-01,
закончим 05.01.2014, и напоследок посмотрим, что же было 05.06.14'''
date_line = re.findall('\d{4}-\d{2}-\d{2}|\d{2}.\d{2}.\d{4}|\d{2}.\d{2}.\d{2}',date_string)
formats = ['%Y-%m-%d','%d.%m.%Y','%d.%m.%y']
result_dates = []
for dt in date_line:
for ft in formats:
try:
result_dates.append(datetime.strptime(dt,ft))
except:
next
for i in result_dates:
print i
##>>>
##2014-01-01 00:00:00
##2014-01-05 00:00:00
##2014-06-05 00:00:00
Подскажите, если сталкивались с чем-то похожим.
Спасибо.
UPD: dateutil (по подсказке из комментариев) упрощает процесс.
Но всё-равно нельзя парсить всю строку целиком. Нужно сначала найти элементы в строке:
import re
from dateutil import parser
date_string = u'''попробуем распарсить дату из этой строки, начнем с 2014-01-01,
закончим 05.01.2014, и напоследок посмотрим, что же было 05.06.14'''
date_line = re.findall('\d{4}-\d{2}-\d{2}|\d{2}.\d{2}.\d{4}|\d{2}.\d{2}.\d{2}',date_string)
for dt in date_line:
print parser.parse(dt)
##>>>
##2014-01-01 00:00:00
##2014-01-05 00:00:00
##2014-06-05 00:00:00