import re s = 'axxxbxd,axxbxxcd,axxxxxd,axcxxx' r = r'(a)(?:.*?(b))?(?:.*?(c))?(d)?' print([re.findall(r, x) for x in s.split(',')]) print ([re.findall(r, x) for x in re.split(r'\W', s)])
Standard input is empty
[[('a', 'b', '', '')], [('a', 'b', 'c', 'd')], [('a', '', '', '')], [('a', '', 'c', '')]] [[('a', 'b', '', '')], [('a', 'b', 'c', 'd')], [('a', '', '', '')], [('a', '', 'c', '')]]