You may need to do this in two steps:
>>> f = "Makimak-cg_mk_Mokarmi"
>>> pattern = "([A-Za-z][A-Za-z0-9]+)((?:[-_][a-z]{2})+)"
>>> mO = re.match(pattern, f)
>>> print mO.groups() + tuple(re.split('[-_]', mO.group(2))[1:])
('Makimak', '-cg_mk', 'cg', 'mk')
This just captures the groups ('Makimak', '-cg_mk')
, and then combines this with the result of splitting the second group on occurrences of -
or _
.
If you always knew the exact number of two character patterns you could accomplish this with a lookahead, but it doesn't seem like that is known up front or you wouldn't need the repetition.