import re
regex = re.compile(r"(?:(?<display>[^<>\n]+)<)?(?<local>(?:[^\n \x22,\.:;<>@\[\\\]]{1,64}|[^\n \x22,.:;<>@\[\\\]]{1,32}\.[^\n \x22,.:;<>@\[\\\]]{1,32}|\x22[^\n]{1,62}\x22))@(?<domain>[\w.]+(?:\.\w{1,4})?|\[(?:IPv6)?[\da-fA-F.:]+\])>?", flags=re.MULTILINE)
test_str = ("\n\n"
"VALID\n"
"Ihavea(comment)tosay@thisistrue.com\n"
"John doe<john@doe.com>\n"
"simple@example.com\n"
"very.common@example.com\n"
"FirstName.LastName@EasierReading.org\n"
"x@example.com\n"
"long.email-address-with-hyphens@and.subdomains.example.com\n"
"user.name+tag+sorting@example.com\n"
"user.name@example.com\n"
"name/surname@example.com\n"
"admin@example\n"
"example@s.example\n"
"\" \"@example.org\n"
"\"john..doe\"@example.org\n"
"mailhost!username@example.org\n"
"\"very.(),:;<>[]\\\".VERY.\\\"very@\\\\ \\\"very\\\".unusual\"@strange.example.com\n"
"user%example.com@example.org\n"
"user-@example.org\n"
"postmaster@[123.123.123.123]\n"
"postmaster@[IPv6:2001:0db8:85a3:0000:0000:8a2e:0370:7334]\n"
"_test@[IPv6:2001:0db8:85a3:0000:0000:8a2e:0370:7334]\n\n"
"I❤️CHOCOLATE@example.com\n\n"
"INVALID\n"
".hey@boss.com\n"
"yo.hi.hello@man.\n"
"abc.example.com\n"
"john..doe@hi.com\n"
"a@b@c@example.com\n"
"a\"b(c)d,e:f;g<h>i[j\\k]l@example.com\n"
"just\"not\"right@example.com\n"
"this is\"not\\allowed@example.com\n"
"this\\ still\\\"not\\\\allowed@example.com\n"
"1234567890123456789012345678901234567890123456789012345678901234+x@example.com\n"
"i.like.underscores@but_they_are_not_allowed_in_this_part")
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