I think using a positive lookahead assertion should do the trick:
>>> re.findall('(?=(a.*?a))', 'a 1 a 2 a 3 a 4 a')
['a 1 a', 'a 2 a', 'a 3 a', 'a 4 a']
re.findall
returns all the groups in the regex - including those in look-aheads. This works because the look-ahead assertion doesn't consume any of the string.