Вы можете использовать re.findall
с положительным прогнозным шаблоном, который соответствует символу, повторенному несколько раз, который повторяется от 1 до 3:
[match for size in range(1, 4) for match in re.findall('(?=(.{%d}))' % size, s)]
Однако было бы более эффективно использовать составление списка с вложенными предложениями for
для перебора всех размеров и начальных индексов:
[s[start:start + size] for size in range(1, 4) for start in range(len(s) - size + 1)]
При заданном s = '12345'
оба приведенных выше результата вернутся:
['1', '2', '3', '4', '5', '12', '23', '34', '45', '123', '234', '345']