Вы можете приблизиться, используя не жадные спецификаторы. Самое близкое, что у меня есть:
>>> re.findall('(".*?"|.*?)(?:,|$)', '"a,b,c",d,e,f')
['"a,,b,c"', 'd', '', 'f', '']
Но, как вы видите, в конце вы получите избыточную пустую строку, которая неотличима от результата, который вы получаете, когда строка заканчивается запятой:
>>> re.findall('(".*?"|.*?)(?:,|$)', '"a,b,c",d,e,f,')
['"a,,b,c"', 'd', '', 'f', '']
так что вам нужно будет выполнить некоторые ручные настройки в конце - что-то вроде:
matches = regex,findall(s)
if not s.endswith(","): matches.pop()
или
matches = regex.findall(s+",")[:-1]
Возможно, есть лучший способ.