# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility
import re
regex = r"(?m)^(?=(?:(?:(?(1)(?!))(.)|(?(2)(?!))(?!\1)(.)|(?(3)(?!))(?!\1|\2)(.)|(?(4)(?!))(?!\1|\2|\3)(.)|(?(5)(?!))(?!\1|\2|\3|\4)(.)|(?(6)(?!))(?!\1|\2|\3|\4|\5)(.)|(?(7)(?!))(?!\1|\2|\3|\4|\5|\6)(.)|(?(8)(?!))(?!\1|\2|\3|\4|\5|\6|\7)(.)|(?(9)(?!))(?!\1|\2|\3|\4|\5|\6|\7|\8)(.))\S*?){1,9}$)(?=(?:\1|\2|\3|\4|\5|\6|\7|\8|\9)*$)(?(DEFINE)(?<one>(?:(?!\1).)*\1)(?<two>(?:(?!\2).)*\2)(?<three>(?:(?!\3).)*\3)(?<four>(?:(?!\4).)*\4)(?<five>(?:(?!\5).)*\5)(?<six>(?:(?!\6).)*\6)(?<seven>(?:(?!\7).)*\7)(?<eight>(?:(?!\8).)*\8)(?<nine>(?:(?!\9).)*\9))(?:(?(1)(?=(?&one){1}(?!.*\1))(?(2)(?=(?&two){1}(?!.*\2))(?(3)(?=(?&three){1}(?!.*\3))(?(4)(?=(?&four){1}(?!.*\4))(?(5)(?=(?&five){1}(?!.*\5))(?(6)(?=(?&six){1}(?!.*\6))(?(7)(?=(?&seven){1}(?!.*\7))(?(8)(?=(?&eight){1}(?!.*\8))(?(9)(?=(?&nine){1}(?!.*\9)))))))))))|(?(1)(?=(?&one){2}(?!.*\1))(?(2)(?=(?&two){2}(?!.*\2))(?(3)(?=(?&three){2}(?!.*\3))(?(4)(?=(?&four){2}(?!.*\4))(?(5)(?=(?&five){2}(?!.*\5))(?(6)(?=(?&six){2}(?!.*\6))(?(7)(?=(?&seven){2}(?!.*\7))(?(8)(?=(?&eight){2}(?!.*\8))(?(9)(?=(?&nine){2}(?!.*\9)))))))))))|(?(1)(?=(?&one){3}(?!.*\1))(?(2)(?=(?&two){3}(?!.*\2))(?(3)(?=(?&three){3}(?!.*\3))(?(4)(?=(?&four){3}(?!.*\4))(?(5)(?=(?&five){3}(?!.*\5))(?(6)(?=(?&six){3}(?!.*\6))(?(7)(?=(?&seven){3}(?!.*\7))(?(8)(?=(?&eight){3}(?!.*\8))(?(9)(?=(?&nine){3}(?!.*\9)))))))))))|(?(1)(?=(?&one){4}(?!.*\1))(?(2)(?=(?&two){4}(?!.*\2))(?(3)(?=(?&three){4}(?!.*\3))(?(4)(?=(?&four){4}(?!.*\4))(?(5)(?=(?&five){4}(?!.*\5))(?(6)(?=(?&six){4}(?!.*\6))(?(7)(?=(?&seven){4}(?!.*\7))(?(8)(?=(?&eight){4}(?!.*\8))(?(9)(?=(?&nine){4}(?!.*\9)))))))))))|(?(1)(?=(?&one){5}(?!.*\1))(?(2)(?=(?&two){5}(?!.*\2))(?(3)(?=(?&three){5}(?!.*\3))(?(4)(?=(?&four){5}(?!.*\4))(?(5)(?=(?&five){5}(?!.*\5))(?(6)(?=(?&six){5}(?!.*\6))(?(7)(?=(?&seven){5}(?!.*\7))(?(8)(?=(?&eight){5}(?!.*\8))(?(9)(?=(?&nine){5}(?!.*\9)))))))))))|(?(1)(?=(?&one){6}(?!.*\1))(?(2)(?=(?&two){6}(?!.*\2))(?(3)(?=(?&three){6}(?!.*\3))(?(4)(?=(?&four){6}(?!.*\4))(?(5)(?=(?&five){6}(?!.*\5))(?(6)(?=(?&six){6}(?!.*\6))(?(7)(?=(?&seven){6}(?!.*\7))(?(8)(?=(?&eight){6}(?!.*\8))(?(9)(?=(?&nine){6}(?!.*\9)))))))))))|(?(1)(?=(?&one){7}(?!.*\1))(?(2)(?=(?&two){7}(?!.*\2))(?(3)(?=(?&three){7}(?!.*\3))(?(4)(?=(?&four){7}(?!.*\4))(?(5)(?=(?&five){7}(?!.*\5))(?(6)(?=(?&six){7}(?!.*\6))(?(7)(?=(?&seven){7}(?!.*\7))(?(8)(?=(?&eight){7}(?!.*\8))(?(9)(?=(?&nine){7}(?!.*\9)))))))))))|(?(1)(?=(?&one){8}(?!.*\1))(?(2)(?=(?&two){8}(?!.*\2))(?(3)(?=(?&three){8}(?!.*\3))(?(4)(?=(?&four){8}(?!.*\4))(?(5)(?=(?&five){8}(?!.*\5))(?(6)(?=(?&six){8}(?!.*\6))(?(7)(?=(?&seven){8}(?!.*\7))(?(8)(?=(?&eight){8}(?!.*\8))(?(9)(?=(?&nine){8}(?!.*\9)))))))))))|(?(1)(?=(?&one){9}(?!.*\1))(?(2)(?=(?&two){9}(?!.*\2))(?(3)(?=(?&three){9}(?!.*\3))(?(4)(?=(?&four){9}(?!.*\4))(?(5)(?=(?&five){9}(?!.*\5))(?(6)(?=(?&six){9}(?!.*\6))(?(7)(?=(?&seven){9}(?!.*\7))(?(8)(?=(?&eight){9}(?!.*\8))(?(9)(?=(?&nine){9}(?!.*\9)))))))))))).*"
test_str = ("------------------------------\n"
"match_words = \n"
"------------------------------\n"
"arraigning\n"
"nonordered\n"
"abadbacdcacbdbdc\n"
"mesosome\n"
"ananna\n"
"unendued\n"
"tromometer\n"
"caucasus\n"
"intestines\n"
"i\n"
"deed\n"
"horseshoer\n"
"happenchance\n"
"reappear\n"
"deeded\n"
"pullup\n"
"arraigning\n"
"testes\n"
"mononymy\n"
"scintillescent\n"
"couscous\n\n"
"------------------------------\n"
"not_match_words = \n"
"------------------------------\n"
"edified\n"
"unreverberating\n"
"underpass\n"
"interinsert\n"
"pilfered\n"
"nippiness\n"
"gregarinian\n"
"deicide\n"
"nonaristocratic\n"
"rototiller\n"
"ozonizing\n"
"museums\n"
"backbreaker\n"
"interradiated\n"
"antistalling\n"
"naturalize\n"
"equitriangular\n"
"reparticipate\n"
"ppd\n"
"miasmas\n"
"cabbage\n\n")
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