Иногда регулярное выражение действительно является правильным инструментом для работы - я не думаю, что следующий код является слишком сложным, и, кажется, довольно четко в своем намерении:
from dateutil.parser import parse
import re
s = "[datetime.date(2003, 2, 4), datetime.date(2003, 2, 6)]"
c = re.compile("datetime.date\((.*?)\)")
date_strings = c.findall(s)
print [parse(date_string).date() for date_string in date_strings]
Если у вас нет доступа к dateutil
модуля, то вы также можете свернуть свой собственный parse
функцию:
import datetime
import re
def parse(s):
year, month, day = s.split(', ')
year, month, day = int(year), int(month), int(day)
return datetime.date(year, month, day)
s = "[datetime.date(2003, 2, 4), datetime.date(2003, 2, 6)]"
c = re.compile("datetime.date\((.*?)\)")
date_strings = c.findall(s)
print [parse(date_string) for date_string in date_strings]
вы имеете в виду преобразование от объекта даты и времени в строку? – TerryA
no - он находится в строковом поле (т. Е. '[Datetime.date (2003, 2, 4) ...'] - это просто текст) - я хочу преобразовать его в список дат. – kyrenia
Подождите, так что вся строка будет такой: '' [datetime.date (2003, 2, 4), datetime.date (2003, 2, 6)] "'? – TerryA