У меня есть список значений, разделенных запятыми, как это:
bDestruction = True, bEmissionAlarme = False, bActionReinit = False, sNatureData = "Sur évènement provant d'ALIS ou SGP - Lignes BJ, IJ ou GMO", sCodeMsgExpliControle = "MSG-G00033_P_ALIM_ME"
Я хочу захватить как параметр, так и значение, поэтому я сделал это регулярное выражение:
(?:([^=]*))="?([^,]*)(?:"|,)?
Но поскольку он работает в большинстве случаев, он не приводится для примера, поскольку текст после sNatureData содержит запятую. Поэтому регулярное выражение считает, что это конец пары {parameter = value} и выдача ошибки.
Что можно сделать? Заранее спасибо.
Я предлагаю вам следовать рекомендациям, приведенным в комментариях, а не использовать регулярное выражение.
Однако, если вам нужно сделать это с помощью регулярного выражения, следующее должно сделать трюк:
(.*?)=("?)([^"]+?)\2(?:,|$)
(.*?)=
Захватывает ключ слева от знака =
. Он захватывает только один ключ, потому что ?
делает его совпадающим как можно меньше символов.("?)
Захватывает, находится ли значение в кавычках.([^"]+?)\2(?:,|$)
([^"]+?)
Захватывает более 1 символа, который не является "
, но как можно меньше.\2(?:,|$)
Это останавливается либо, если была цитата, и она находит ее снова, либо в следующей запятой или если строка завершена.