Aha. Tak to asi bude nejjednodušší to vzít od #1 do $2 a až pak rozdělit, pokud v tom je další #1.
>>> data = """#1aa#1bb$2cc
... #1dd$2ee#1ff
... gg#1hh$2ii
... #1jj$2kk
... #1ll$2mm#1nn$2oo#1pp$2qq"""
>>> matches = re.findall(r'#1(.*?)\$2', data, re.DOTALL)
>>> print(matches)
['aa#1bb', 'dd', 'ff\ngg#1hh', 'jj', 'll', 'nn', 'pp']
>>> matches = [match.split('#1') for match in matches]
>>> print(matches)
[['aa', 'bb'], ['dd'], ['ff\ngg', 'hh'], ['jj'], ['ll'], ['nn'], ['pp']]
>>> matches = list(itertools.chain.from_iterable(matches))
>>> print(matches)
['aa', 'bb', 'dd', 'ff\ngg', 'hh', 'jj', 'll', 'nn', 'pp']