import re
regex = re.compile(r"^(?=(?:\+|0{2})?(?:(?:[\(\-\)\t\f ]*\d){7,10})?(?:[\t\f ]?\d{2,3})(?:[\-\s]?[ext]{1,3}[\-\t\f ]?\d{1,4})?$)((?:\+|0{2})\d{0,3})?(?:[\-\t\f ]?)(\(0?\d{1,3}\)|\d{0,3})(?:[\-\t\f ]{0,2}\d){3,}(?:[\-\s]?(?:x|ext)[\-\t\f ]?(\d{1,4}))?$")
test_str = ("123456789\n"
"1234567890123456\n"
"1234567890123\n\n"
" (0)123456789\n"
"+34123456789\n"
"+34 (0)123456789\n"
" +340123456789\n"
"+34 123 456 789\n"
"+34 1 23 45 67 89\n"
"001230123456789\n"
"ext1234\n"
"++34123456789\n"
"00-0-----000\n"
"01 555012345\n"
"001-555012345\n"
"+012345678\n"
"911\n"
"112\n"
"12(34567890\n"
"123)456789012345\n\n"
"0091234567890\n"
"+9 123-4567890-x321\n"
"+9-123-456-7890\n"
"+9 123 4 5 6-7890x1234\n"
"009-(123)-456-7890 ext4321\n"
"0091234567890x1234\n"
"+9-123-456-7890x12345\n"
"+9-123-456-7890 ext 1234\n"
"0027-123-456-7890\n"
"+27-123-456-7890\n"
"+9(123)4567890\n")
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