Что-бы одна и та же группа в шаблоне сработала в нескольких местах, должно быть несколько match (что-бы каждое такое место обрабатывалось регуляркой "с нуля", как-бы).
В регулярках есть разные движки,
теоретически тут можно было бы запустить рекурсию, или поработать с динамическими данными в lookahead/lookbehind, но в python, как я понял, не так уж много фич поддерживается.
Решить в каком-то динамическом виде у меня не получилось. В итоге я скопипастил паттерн некого "хвоста" строки, которая начинается со start (четвертый пример таким образом отпадет)
(?:,?\s*(?:(\"[^\"]*\")))?
по несколько раз и получил нужный результат (т.е. несколько групп будет в рамках одного match, да и количество групп поддерживается не больше количества скопированного шаблона). Попробовал сократить через DEFINE, но он тоже не поддерживается, видимо. Сделать этот "хвост" именованной группой и использовать ее тоже не получится, т.к. содержимое разное.
Убрать всякие запятые из match так, как это происходит со start, тоже не удастся - lookahead в python не поддерживает квантификаторы.
Как-то так:
https://regex101.com/r/7eVJFt/4