La prise en charge des unités ne pose aucun problème, et termine le problème des chiffres romains :
>>> motif = '^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$'
>>> re.search(motif, 'MDLV')
<_sre.SRE_Match object at 0x008EEB48>
>>> re.search(motif, 'MMDCLXVI')
<_sre.SRE_Match object at 0x008EEB48>
>>> re.search(motif, 'MMMMDCCCLXXXVIII')
<_sre.SRE_Match object at 0x008EEB48>
>>> re.search(motif, 'I')
<_sre.SRE_Match object at 0x008EEB48>