# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility
import re
regex = r"\b(o(?1)?o)\b"
test_str = ("o 1\n"
"oo 2\n"
"ooo 3\n"
"oooo 4\n"
"ooooo 5\n"
"oooooo 6 \n"
"ooooooo 7 \n"
"oooooooo 8\n"
"ooooooooo 9\n"
"oooooooooo 10\n"
"ooooooooooo 11\n"
"oooooooooooo 12\n"
"ooooooooooooo 13\n"
"oooooooooooooo 14\n"
"ooooooooooooooo 15\n"
"oooooooooooooooo 16\n"
"ooooooooooooooooo 17\n"
"oooooooooooooooooo 18\n"
"ooooooooooooooooooo 19\n"
"oooooooooooooooooooo 20\n"
"ooooooooooooooooooooo 21\n"
"oooooooooooooooooooooo 22\n"
"ooooooooooooooooooooooo 23\n"
"oooooooooooooooooooooooo 24\n"
"ooooooooooooooooooooooooo 25\n"
"oooooooooooooooooooooooooo 26\n"
"ooooooooooooooooooooooooooo 27\n"
"oooooooooooooooooooooooooooo 28\n"
"ooooooooooooooooooooooooooooo 29\n"
"oooooooooooooooooooooooooooooo 30\n"
"ooooooooooooooooooooooooooooooo 31\n"
"oooooooooooooooooooooooooooooooo 32\n"
"ooooooooooooooooooooooooooooooooo 33\n"
"oooooooooooooooooooooooooooooooooo 34\n"
"ooooooooooooooooooooooooooooooooooo 35\n"
"oooooooooooooooooooooooooooooooooooo 36 \n"
"ooooooooooooooooooooooooooooooooooooo 37 \n"
"oooooooooooooooooooooooooooooooooooooo 38\n"
"ooooooooooooooooooooooooooooooooooooooo 39\n"
"oooooooooooooooooooooooooooooooooooooooo 40\n"
"ooooooooooooooooooooooooooooooooooooooooo 41\n"
"oooooooooooooooooooooooooooooooooooooooooo 42\n"
"ooooooooooooooooooooooooooooooooooooooooooo 43\n"
"oooooooooooooooooooooooooooooooooooooooooooo 44\n"
"ooooooooooooooooooooooooooooooooooooooooooooo 45\n"
"oooooooooooooooooooooooooooooooooooooooooooooo 46\n"
"ooooooooooooooooooooooooooooooooooooooooooooooo 47\n"
"oooooooooooooooooooooooooooooooooooooooooooooooo 48\n"
"ooooooooooooooooooooooooooooooooooooooooooooooooo 49\n"
"oooooooooooooooooooooooooooooooooooooooooooooooooo 50\n"
"ooooooooooooooooooooooooooooooooooooooooooooooooooo 51\n"
"oooooooooooooooooooooooooooooooooooooooooooooooooooo 52\n"
"ooooooooooooooooooooooooooooooooooooooooooooooooooooo 53\n"
"oooooooooooooooooooooooooooooooooooooooooooooooooooooo 54\n"
"ooooooooooooooooooooooooooooooooooooooooooooooooooooooo 55\n"
"oooooooooooooooooooooooooooooooooooooooooooooooooooooooo 56\n"
"ooooooooooooooooooooooooooooooooooooooooooooooooooooooooo 57\n"
"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooo 58\n"
"ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo 59\n"
"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo 60\n"
"ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo 61\n"
"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo 62\n"
"ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo 63\n"
"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo 64\n"
"ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo 65")
matches = re.finditer(regex, test_str)
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