Просмотрите файл char по char и разделите значения вручную, когда у вас есть кавычка, вы входите в «режим кавычек», где вы не будете разделять запятыми, а когда появляется заключительная кавычка, вы покидаете ее.
Для запятых с обратной косой чертой: если вы читаете обратную косую черту, вы также читаете следующий символ и затем решаете, что с ним делать.
Конечно, это не очень эффективно, но вы не можете использовать регулярные выражения для этого. Я имею в виду, что вы можете, но, поскольку я верю, что кавычки тоже можно избежать, это будет очень грязно.
Если вы хотите попробовать это:
- давайте начнем с сопоставления кавычки, за которой следуют символы, которые не являются:
"[^"]*"
- для преодоления проблемы с экранированными персонажами вы можете использовать lookaheads
(?<!\\)"[^"]*(?<!\\)"
- теперь он сломается, если в значении есть экранированные кавычки, может, это работает? (Не проверял)
(?<!\\)"[^"|(?<=\\)"]*(?<!\\)"
Таким образом, вы видите, что это очень быстро становится грязным, поэтому я бы посоветовал вам прочитать его по символам.