import re
regex = re.compile(r"^(\d{10,21})|(\+\d{1,3}|\d{1,4}|\(\+\d{1,3}\)|\(\d{1,2}\))(([ -.]\d+){1,5}$|([ -.]\d+){1,5}([ -.](ext\.|x|extention))[ -.]\d{1,5}$)", flags=re.MULTILINE)
test_str = ("Mexico (01) 55 1234 5678\n"
"Mexico (55) 1234 5678\n"
"Germany +49 30 2415889\n"
"UK +44 20 7930 7530\n"
"U.S.A. +1 503-225-5555\n"
"U.S.A. +1 503.225.5555\n"
"U.S.A. +001 503 225 5555\n"
"South Africa +27 21 419 3715\n"
"South Africa (+27) 21 419 3715\n"
"Japan +81 3-3211-3677\n"
"Japan +81 0112716677\n"
"Netherlands +31 20 610 9067\n"
"France +33 1 44 52 71 73\n"
"Australia +61 2 9669 3885\n"
"Australia (06) 1234 1234\n"
"Australia 0444 123 123\n"
"Spain +34 934 12 70 31\n"
"Spain 934 12 70 31\n"
"Portugal +351 21 846 1081\n\n"
"+81 3-3211-3677 ext. 12\n"
"+81 3-3211-3677 x 12\n"
"+81 3-3211-3677 extention 12\n"
"1231231233")
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