# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility
import re
regex = r"([[:<:]]M*(C[MD]|D?C{0,3})(X[CL]|L?X{0,3})(I[VX]|V?I{0,3})[[:>:]])"
test_str = ("### match ###\n"
"I II III IV V VI VII VIII IX\n"
"X XIII XIV XV XVIII XIX\n"
"XXV XXVI XXVII XXVII XXIX\n"
"XXX XXXIII XXXVIII XXXIX\n"
"XL XLII XLV XLVIII XLIX\n"
"L LI LII LIII LIV LV LVI LVII LVIII LIX\n"
"LX LXVI LXIX LXXIX LXXXV LXXXVIII\n"
"XC XCV XCVI XCVII XCIX\n"
"C CI CV CIX\n"
"CXI CXX CXXX CXXXVIII CXXXIX CXLII CL CLV CLVIII CLX CLXX CLXXX CXC CXCIII CXCVII CXCIX CC CCIII CCVIII CCIX CCXXV CCL CCLXXV CCCLXXV CD CDXXV CDL CDLXXV CDXC\n"
"D DIX DCLXVI DCLXXV DCCCXXVIII\n"
"CM CMLXXV \n"
"M ML MCV MCCCL MD MDCCXXV MDCCCLXXV MCML MCMXCVIII MCMXCIX\n"
"MM MMCCCXXV MMCDLXXV MMDL\n"
"MMM MMMCCXXVIII MMMCCCXXVIII MMMD\n"
"MMMCMXCV MMMCMXCVIII MMMCMXCIX\n"
"MMMM MMMMMMMMMCMXCIX MMMMMMMMMMMDCCXXXII\n"
"#### do not match ####\n"
"VV VVX XVV IIII IIIII IVIVIV XIIX XXXXII VC IIXV IC CXIIL\n"
"LVIXXX LIXXX XXXVIIII XXXVV MCVV MLTK IIV IIX IIL IIM IIC CCM\n"
"CMD CMDB L0L LOL GG RAF WTF XIIIXCVIIVMC MMIXIII CCCXXXIIX\n"
"MCMM MDCCLXXVIIII CCCD CCCXXXIIII MMMMXXXX")
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