Регулярное выражение для соответствия разделенному запятыми списку ключ = значение, где значение может содержать запятые

У меня есть наивный "парсер", который просто делает что-то вроде:
[x.split('=') for x in mystring.split(',')]

Однако mystring может быть что-то вроде
'foo=bar,breakfast=spam,eggs'

Очевидно, что
Наивный сплиттер просто не сделает этого. Я ограниченСтандартная библиотека Python 2.6 за это,
Так напримерPyparsing не может быть использован.

Ожидаемый результат
[('foo', 'bar'), ('breakfast', 'spam,eggs')]

Я пытаюсь сделать это с помощью регулярных выражений, но сталкиваюсь со следующими проблемами:

Моя первая попытка
r'([a-z_]+)=(.+),?'
Дал мне
[('foo', 'bar,breakfast=spam,eggs')]

Очевидно, что
Изготовление.+ не жадный не решает проблему.

Так,
Я предполагаю, что я должен как-то сделать последнюю запятую (или$) обязательное.
Делать то, что на самом деле не работает,
r'([a-z_]+)=(.+?)(?:,|$)'
Как и в этом случае материал за запятой в значении, содержащем единицу, опущен,
например[('foo', 'bar'), ('breakfast', 'spam')]

Я думаю, что я должен использовать какую-то операцию по просмотру (?).
Вопросы)
1.Который из я использую? или же
2.Как я делаю это / это?

редактировать:

На основеdaramarakответ ниже,
В итоге я сделал то же самое, что иabarnert потомпредложенный в несколько более многословной форме;

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

РЕДАКТИРОВАТЬ 2:

Просто чтобы удовлетворить мое любопытство, возможно ли это счистый обычные выражения? Так чтоre.findall() вернул бы список из 2-х кортежей?

Ответы на вопрос(5)

Ваш ответ на вопрос