Это сложнее, чем вы думаете - не только могут быть запятые внутри кавычек, но также могут быть кавычки внутри кавычек. Две последовательные кавычки внутри строки в кавычках не означают конец строки. Вместо этого он сообщает кавычку, встроенную в строку, например:
"x", "y,""z"""
должен быть разобран как:
x
y,"z"
Итак, базовая последовательность выглядит примерно так:
Find the first non-white-space character.
If it was a quote, read up to the next quote. Then read the next character.
Repeat until that next character is not also a quote.
If the next (non-whitespace) character is not a comma, input is malformed.
If it was not a quote, read up to the next comma.
Skip the comma, repeat the whole process for the next field.
Обратите внимание, что, несмотря на тег, я не предоставляю регулярное выражение - я совсем не уверен, что видел регулярное выражение, которое действительно может правильно обработать это.