"""
Project: Date Detection
Page 186
"""

import re
import datetime

tests = """
    Sí 1/1/1911
    Sí 02/1/2000
    Sí 12/12/2012
    No 123/1/1911
    No 1/123/1911
    No 1/1/11
    Inválido 32/12/1212
    Inválido 3/13/1212
    Inválido 3/12/3000
    Inválido 3/12/00
    Inválido 29/02/2023
"""


def find_date(string):
    rgx = re.compile(r"\b(\d{1,2})/(\d{1,2})/(\d{4})")
    finds = rgx.findall(string)
    dates = []
    for find in finds:
        d, m, y = int(find[0]), int(find[1]), int(find[2])
        if y > 999 and y < 3000:
            try:
                dates.append(datetime.date(y, m, d).isoformat())
            except Exception:
                pass
    return dates


dates = find_date(tests)
print(dates)
