import re l = ['foo bar', 'foo bar foo:bar', 'foo bar '] rx = re.compile(r'[^:\s]+|:|(?<!\S)(?!\S)') for s in l: print(f"'{s}'", '=>', rx.findall(s))
Standard input is empty
'foo bar' => ['foo', 'bar'] 'foo bar foo:bar' => ['foo', 'bar', 'foo', ':', 'bar'] 'foo bar ' => ['foo', 'bar', '']