Ваше регулярное выражение ((c*)|(cccd)
) означает совпадение любой из двух вещей:
cccd
Поскольку регулярные выражения жадные, он потребляет строку ccc
в качестве соответствия, так что это то, что вы возвращаете. Сначала попробуем, что когда-либо наступит раньше (в этом случае c*
, и если он сможет сделать совпадение, то это будет.
Чтобы исправить то, что вы хотите, попробуйте регулярное выражение: (cccd)|(c*)
. При этом:
>>> mo = re.match('(cccd)|(c*)', 'cccd')
>>> mo.group(0)
'cccd'
Пример здесь: https://regex101.com/r/aU8pE7/1