import re
regex = re.compile(r"(\n|\s)(?:(?:\+?(\d{1}|\d{2}|\d{3})\s*)\s*(?:\(\s*(\d{1}|\d{2}|\d{3})\s*\)|(\d{1,3}))\s*\-?(?:\(\s*(\d{1,3})\s*\)|(\d{3}))\s*\-?(?:\d{2}\s*\-?\d{2}))", flags=re.MULTILINE)
test_str = ("\n"
"+79996364778 rus\n"
"8 (918) 373-6633 rus\n"
"+1 650-798-2800 usa \n"
" 8(949)373-66-55 rus\n"
" +7 (961) 859-56-19 rus\n"
"+1 205-635-1136 usa\n"
"+22(909)333 4334\n"
"+7(985)5310868\n"
"+79855310868\n"
"88008454545\n"
"+55 11 99999-5555 Brazil\n"
"+593 7 282-3889 Ecuador\n"
"(+44) 0848 9123 456 UK\n"
"+1 284 852 5500 BVI\n\n"
"+1 345 9490088 Grand Cayman\n"
"+32 2 702-9200 Belgium\n"
"+65 6511 9266 Asia Pacific\n"
"+86 21 2230 1000 Shanghai\n"
"+9124 4723300 India\n"
"+821012345678 South Korea\n"
"And for your extension pleasure\n"
"+55 11 99999-5555 ramal 123 Brazil\n"
"+55 11 99999-5555 foo786544 Brazil\n\n"
"(?!\\b(0)\\1+\\b)(\\+?\\d{1,3})\\s?\\(?\\d{3}\\)?\\s?([. -]?)\\d{3}\\3\\d{4}")
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