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[ ]?\d{0,4}\)|\(\d{0,4}\)|\d{0,4})(?:[\-\.\/ \t\f]{0,2}\d){3,8}(?:[\-\s]?(?:x|ext)[\-\t\f ]?(\d{1,4}))?$", flags=re.MULTILINE | re.IGNORECASE)
test_str = ("911\n"
"123456789\n"
"12345678\n"
"1234567890123\n"
"001231234567890\n"
"0012312345678901\n"
"123456789012\n"
"1234\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"
"00123-(4321)-567.89 ext-4321\n"
"0027-123-456-7890\n"
"+27-123-456-7890\n"
"+9(123)4567890\n\n"
"(01 55) 1234 5678\n"
"(01 551) 12345678\n"
"+49 (1234) 567890\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"
"112\n"
"12(34567890\n"
"123)456789012345\n\n"
"1-234-567-8901\n"
"+1-234-567-8901 x1234\n"
"0011-234-567-8901 ext1234\n"
")234( 567 8901\n"
"(234) 567 8901\n"
"+11 (234) 567-8901\n"
"+1.234.567.8901\n"
"+1/234/567/8901\n"
"12345678901\n"
"2345678901")
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