Analisi dell’inserimento CSV con una RegEx in java

Lo so, ora ho due problemi. Ma mi sto divertendo!

Ho iniziato con questo consiglio di non provare a dividere, ma invece di abbinare su ciò che è un campo accettabile, ed espanso da lì a questa espressione.

final Pattern pattern = Pattern.compile("\"([^\"]*)\"|(?<=,|^)([^,]*)(?=,|$)"); 

L’espressione appare così senza le fastidiose citazioni sfuggite:

 "([^"]*)"|(?<=,|^)([^,]*)(?=,|$) 

Funziona bene per me – o corrisponde a “due citazioni e qualsiasi cosa ci sia tra loro” o “qualcosa tra l’inizio della linea o una virgola e la fine della linea o una virgola”. Iterare attraverso le partite mi porta tutti i campi, anche se sono vuoti. Per esempio,

 the quick, "brown, fox jumps", over, "the",,"lazy dog" 

si rompe in

 the quick "brown, fox jumps" over "the" "lazy dog" 

Grande! Ora voglio eliminare le virgolette, quindi ho aggiunto il lookahead e guardato dietro gruppi non-catturanti come stavo facendo per le virgole.

 final Pattern pattern = Pattern.compile("(?<=\")([^\"]*)(?=\")|(?<=,|^)([^,]*)(?=,|$)"); 

di nuovo l’espressione è:

 (?<=")([^"]*)(?=")|(?<=,|^)([^,]*)(?=,|$) 

Invece del risultato desiderato

 the quick brown, fox jumps over the lazy dog 

ora ho questa ripartizione:

 the quick "brown fox jumps" ,over, "the" ,, "lazy dog" 

Cosa mi manca?