Хорошо, у вас есть требование сделать это с помощью регулярного выражения. Имейте в виду, что это может привести к тому, что некоторые крайние случаи не будут охвачены!
import re
import datetime
pattern = re.compile("^(0[1-9]|[12][0-9]|3[01])[- \/.,_](0[1-9]|1[012])[- \/.,_](19|20)\d\d")
dob = input('Enter your birthday (dd/mm/yyyy): ')
result = pattern.match(dob)
if pattern.match(dob):
print("format is ok")
else:
print("format is bad")
Хорошо, регулярное выражение кажется допустимым (за исключением группы захвата за год. Вы можете использовать Regexr или аналогичные сервисы, если вам нужно его улучшить).
Затем вы можете деконструировать подходящие группы, чтобы получить день, месяц и год:
[day, month, year] = result.groups() # As mentioned, year is currently either 19 or 20
Затем следующий шаг будет сравнить месяц с текущим месяцем. Это поможет решить, добавлять ли год или нет. В случае, если это будет тот же или соседний месяц, вы также можете посмотреть на эти дни.
Наконец, вычтите текущий год из введенного (после того, как вы зафиксировали группу захвата года) и сделать математику.
Поскольку это задание, я не буду предоставлять код для этого; -)