Через re, конечно, самый наглядный вариант. Можно проще:
import re
re.split('(\d+)', "a44b3c222")
Отфильтровать пустые значения и конвертировать в int:
[int(s) if s.isdigit() else s for s in filter(None, re.split('(\d+)', "a44b3c222"))]
Или так, что хуже по читаемости:
[[str, int][s.isdigit()](s) for s in filter(None, re.split('(\d+)', "a44b3c222"))]
Можно ещё поизвращаться:
from itertools import groupby
[int(''.join(v)) if k else ''.join(v) for k, v in groupby("a44b3c222", key=lambda s: s.isdigit())]