You can achieve what you need without a regex here:
result = []
text = "aaabbbbcca"
prev = ''
for c in text:
if c == prev:
result.append(result[-1] + c)
else:
result.append(c)
prev = c
print(result)
# => ['a', 'aa', 'aaa', 'b', 'bb', 'bbb', 'bbbb', 'c', 'cc', 'a']
See the Python demo.
In short, you can iterate over the string and append new item to a result
list when the new char is not equal to the previous char, otherwise, append a new item with the value equal to the previous item + the same char concatenated to the value.
With regex, the best you can do is
import re
text = "aaabbbbcca"
print( [x.group(1) for x in re.finditer(r'(?=((.)\2*))', text)] )
# => ['aaa', 'aa', 'a', 'bbbb', 'bbb', 'bb', 'b', 'cc', 'c', 'a']
See this Python demo. Here, (?=((.)\2*))
matches any location inside the string that is immediately preceded with any one char (other than line break chars if you do not use re.DOTALL
option) that is followed with zero or more occurrences of the same char (capturing the char(s) into Group 1).