# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility
import re
regex = r"""
(?m)
^
(?=
(?:
(?:
(?(1) (?!) )
( . ) # (1)
| (?(2) (?!) )
(?! \1 )
( . ) # (2)
| (?(3) (?!) )
(?! \1 | \2 )
( . ) # (3)
| (?(4) (?!) )
(?! \1 | \2 | \3 )
( . ) # (4)
| (?(5) (?!) )
(?! \1 | \2 | \3 | \4 )
( . ) # (5)
| (?(6) (?!) )
(?! \1 | \2 | \3 | \4 | \5 )
( . ) # (6)
| (?(7) (?!) )
(?! \1 | \2 | \3 | \4 | \5 | \6 )
( . ) # (7)
| (?(8) (?!) )
(?! \1 | \2 | \3 | \4 | \5 | \6 | \7 )
( . ) # (8)
| (?(9) (?!) )
(?! \1 | \2 | \3 | \4 | \5 | \6 | \7 | \8 )
( . ) # (9)
)
\S*?
){1,9}
$
)
(?= (?: \1|\2|\3|\4|\5|\6|\7|\8|\9 )* $ )
(?(DEFINE)
(?<one> # (10)
(?: (?! \1 ) . )*
\1
)
(?<two> # (11)
(?: (?! \2 ) . )*
\2
)
(?<three> # (12)
(?: (?! \3 ) . )*
\3
)
(?<four> # (13)
(?: (?! \4 ) . )*
\4
)
(?<five> # (14)
(?: (?! \5 ) . )*
\5
)
(?<six> # (15)
(?: (?! \6 ) . )*
\6
)
(?<seven> # (16)
(?: (?! \7 ) . )*
\7
)
(?<eight> # (17)
(?: (?! \8 ) . )*
\8
)
(?<nine> # (18)
(?: (?! \9 ) . )*
\9
)
)
(?: ### Times Table 9 x 9 = 81 max char string
# 1
(?(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 ))
)))))))))
| # 2
(?(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 ))
)))))))))
| # 3
(?(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 ))
)))))))))
| # 4
(?(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 ))
)))))))))
| # 5
(?(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 ))
)))))))))
| # 6
(?(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 ))
)))))))))
| # 7
(?(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 ))
)))))))))
| # 8
(?(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 ))
)))))))))
| # 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, re.MULTILINE | re.VERBOSE)
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