Недопустимый формат даты рядом с '%Y-%m-%d'
, поскольку он должен был '%d/%m/%Y
'смотреть на предоставленную вами дату: birthday on 20/12/2018
(dd/mm/yyyy)
Изменить это :
date = datetime.datetime.strptime(match.group(), '%Y-%m-%d').date()
С этим :
date = datetime.datetime.strptime(match.group(), '%d/%m/%Y').date()
Ваше исправление :
import datetime
from datetime import date
import re
s = "birthday on 20/12/2018"
match = re.search(r'\d{2}/\d{2}/\d{4}', s)
date = datetime.datetime.strptime(match.group(), '%d/%m/%Y').date()
print (date)
Но
Зачем ввязываться во все неприятности? Когда у них есть более простые и элегантные способы.
Использование dparser
:
import dateutil.parser as dparser
dt_1 = "birthday on 20/12/2018"
print("Date: {}".format(dparser.parse(dt_1,fuzzy=True).date()))
OUTPUT
Date: 2018-12-20
EDIT
С вашим отредактированным вопросом, который теперь имеет несколько дат, вы можете извлечь их, используя regex
:
import re
s = "birthday on 20/12/2018 and wedding aniversry on 04/01/1997 and dob is on 09/07/1897"
pattern = r'\d{2}/\d{2}/\d{4}'
print("\n".join(re.findall(pattern,s)))
OUTPUT
20/12/2018
04/01/1997
09/07/1897
OR
Использование dateutil
:
from dateutil.parser import parse
for s in s.split():
try:
print(parse(s))
except ValueError:
pass
OUTPUT
2018-12-20 00:00:00
1997-04-01 00:00:00
1897-09-07 00:00:00