Bueno, no soy un experto en regex, pero estoy seguro de que tienen una respuesta para esto.
Procesalmente está yendo letra por letra. Establezca una variable, digamos dontMatch, en FALSE.
Cada vez que se encuentra con una cotización alternar dontMatch.
cada vez que se encuentra con una coma, marque dontMatch. Si es VERDADERO, ignora la coma. Si es FALSO, divídelo en la coma.
Esto funciona para el ejemplo que das, pero la lógica que utilizas para las comillas es fundamentalmente defectuosa: debes escapar de ellas o usar otro delimitador (comillas simples, por ejemplo) para separar las comillas principales de las comillas menores.
Por ejemplo,
"a", ""b", ""c", "d"", "e""
rendirá malos resultados.
Esto se puede arreglar con otro parche. En lugar de simplemente mantener un verdadero falso, tienes que hacer coincidir las comillas.
Para que coincida con las comillas, debe saber lo que se vio por última vez, lo que lo lleva a un territorio de análisis bastante profundo. Probablemente, en ese momento, querrá asegurarse de que su lenguaje esté bien diseñado, y si es así, puede usar una herramienta de compilación para crear un analizador para usted.
-Adam
@ Matt: No todo el mundo es un nativo Inglés hablante. No sé qué causó la manía de edición. Lo restauré a una versión que refleja la intención original, ya que el significado de la pregunta comenzó a degradarse. – Tomalak
@xyz: Lo siento por los cambios anárquicos que se hicieron a su pregunta sin una buena razón. Espero que esto haya llegado a su fin ahora. – Tomalak
Su CSV no es válido, debe ser "a", "" "b" "," "x" "," "y" "", "c" – dalle