Wyrażenie regularne pasujące do rozdzielonej przecinkami listy klucz = wartość, gdzie wartość może zawierać przecinki

Mam naiwny „parser”, który po prostu robi coś takiego:
[x.split('=') for x in mystring.split(',')]

Jednak mystring może być czymś w rodzaju
'foo=bar,breakfast=spam,eggs'

Oczywiście,
Naiwny rozdzielacz po prostu tego nie zrobi. Jestem ograniczony doStandardowa biblioteka Pythona 2.6 dla tego,
Na przykładparsowanie nie może być użyty.

Oczekiwany wynik to
[('foo', 'bar'), ('breakfast', 'spam,eggs')]

Próbuję to zrobić za pomocą wyrażenia regularnego, ale napotykam następujące problemy:

Moja pierwsza próba
r'([a-z_]+)=(.+),?'
Dałeś mi
[('foo', 'bar,breakfast=spam,eggs')]

Oczywiście,
Zrobienie.+ nie chciwy nie rozwiązuje problemu.

Więc,
Zgaduję, że muszę jakoś zrobić ostatni przecinek (lub$) obowiązkowy.
Po prostu to nie działa,
r'([a-z_]+)=(.+?)(?:,|$)'
Tak jak w przypadku, rzeczy za przecinkiem w wartości zawierającej jeden są pomijane,
na przykład[('foo', 'bar'), ('breakfast', 'spam')]

Myślę, że muszę użyć pewnego rodzaju operacji „?”.
Pytania)
1Który czy używam? lub
2.W jaki sposób mam to zrobić / to?

Edytować:

Oparte nadaramarakodpowiedź poniżej,
Skończyło się tak samo jakabarnert późniejzasugerował w nieco bardziej szczegółowej formie;

vals = [x.rsplit(',', 1) for x in (data.split('='))]
ret = list()
while vals:
    value = vals.pop()[0]
    key = vals[-1].pop()
    ret.append((key, value))
    if len(vals[-1]) == 0:
        break

EDYCJA 2:

Aby zaspokoić moją ciekawość, jest to możliweczysty wyrażenia regularne? To znaczy takre.findall() zwróci listę 2 krotek?

questionAnswers(5)

yourAnswerToTheQuestion