import re
regex = re.compile(r"^(?:[\+-]?\d{4}(?!\d{2}\b))(?:(-?)(?:(?:0[1-9]|1[0-2])(?:\1(?:[12]\d|0[1-9]|3[01]))?|W(?:[0-4]\d|5[0-2])(?:-?[1-7])?|(?:00[1-9]|0[1-9]\d|[12]\d{2}|3(?:[0-5]\d|6[1-6])))(?:[T\s](?:(?:(?:[01]\d|2[0-3])(?:(:?)[0-5]\d)?|24\:?00)(?:[\.,]\d+(?!:))?)?(?:\2[0-5]\d(?:[\.,]\d+)?)?(?:[zZ]|(?:[\+-])(?:[01]\d|2[0-3]):?(?:[0-5]\d)?)?)?)?$", flags=re.UNICODE | re.DOTALL | re.IGNORECASE | re.MULTILINE)
test_str = ("2021\n"
"2021-10\n\n"
"2021-00\n"
"2021-13\n"
"2021-10-24\n"
"2021-10-00\n"
"2021-10-32\n"
"2021-10-24T10\n"
"2021-10-24T48\n"
"2021-10-24T10:30\n"
"2021-10-24T10:95\n"
"2021-10-24T10:30:47\n"
"2021-10-24T10:30:78\n"
"2021-10-24T10:30:47.5\n"
"2021-10-24T10:30:47.333\n"
"2021-10-24T10:30:47.333333\n"
"2021-10-24T10:30:47Z\n"
"2021-10-24T10:30:78Z\n"
"2021-10-24T10:30:47.5Z\n"
"2021-10-24T10:30:47.333Z\n"
"2021-10-24T10:30:47.333333Z\n"
"2021-10-24T10:30:47-03:00\n"
"2021-10-24T10:30:78-03:00\n"
"2021-10-24T10:30:47.5-03:00\n"
"2021-10-24T10:30:47.333-03:00\n"
"2021-10-24T10:30:47.333333-03:00\n"
"Nate☬158⚈̥̥̥̥̥̀ᴗ✯")
matches = regex.finditer(test_str)
for match_num, match in enumerate(matches, start=1):
print(f"Match {match_num} was found at {match.start()}-{match.end()}: {match.group()}")
for group_num, group in enumerate(match.groups(), start=1):
print(f"Group {group_num} found at {match.start(group_num)}-{match.end(group_num)}: {group}")
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Python, please visit: https://docs.python.org/3/library/re.html