# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility
import re
regex = 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}))"
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 = re.finditer(regex, test_str, re.MULTILINE)
for matchNum, match in enumerate(matches, start=1):
print ("Match {matchNum} was found at {start}-{end}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group()))
for groupNum in range(0, len(match.groups())):
groupNum = groupNum + 1
print ("Group {groupNum} found at {start}-{end}: {group}".format(groupNum = groupNum, start = match.start(groupNum), end = match.end(groupNum), group = match.group(groupNum)))
# Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution.
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