Захват запятой внутри текста значений, разделенных запятыми [дубликаты]

1

У меня есть список значений, разделенных запятыми, как это:

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} и выдача ошибки.

Что можно сделать? Заранее спасибо.

  • 0
    Я думаю, вы можете рассмотреть возможность использования парсера здесь. Содержимое запятой правильно указано, чтобы сообщить нам, что то, что находится внутри кавычек, не должно рассматриваться как разделитель. Может быть, вы можете дать нам больший контекст для того, где эти ключи / значения появляются?
  • 0
    Конечно, мне нужно захватить это, чтобы ввести данные в таблицы, с INSERT INTO TABLE (параметры) VALUES (значения)
Показать ещё 3 комментария
Теги:

1 ответ

1
Лучший ответ

Я предлагаю вам следовать рекомендациям, приведенным в комментариях, а не использовать регулярное выражение.

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

(.*?)=("?)([^"]+?)\2(?:,|$)
  • (.*?)= Захватывает ключ слева от знака =. Он захватывает только один ключ, потому что ? делает его совпадающим как можно меньше символов.
  • ("?) Захватывает, находится ли значение в кавычках.
  • ([^"]+?)\2(?:,|$)
    • ([^"]+?) Захватывает более 1 символа, который не является ", но как можно меньше.
    • \2(?:,|$) Это останавливается либо, если была цитата, и она находит ее снова, либо в следующей запятой или если строка завершена.

Тест онлайн

  • 0
    Честно говоря, я почти новичок в regex, и \ 2 был тем, что я искал до сих пор. Большое спасибо за ваш ответ, хорошего дня.
  • 0
    @ v01dv01d Добро пожаловать!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню