2 Stimmen

CSV mit einem RegEx in Java analysieren - Anführungszeichen innerhalb einer Zelle ausblenden

Ich bin auf der Suche nach einem Java-Regex, der die doppelten Anführungszeichen in einer Excel-Zelle ausbricht.

Ich habe dieses Beispiel befolgt, benötige aber eine weitere Änderung des regulären Ausdrucks, um die doppelten Anführungszeichen in einer der Zellen zu umgehen.

CSV-Eingabe mit einem RegEx in Java parsen

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

Beispielhafte Daten:

"A, B" , "2" Größe" , "text1,text2, text3"

Die Regex von oben schlägt fehl bei 2" .

Ich möchte, dass die Ausgabe wie unten aussieht, egal ob die äußeren Anführungszeichen vorhanden sind oder nicht.

"A, B"
"2" Größe"
"text1,text2, text3"

0voto

eppesuig Punkte 1325

Ich stimme zwar zu, dass die Verwendung von Regex zum Parsen eines CVS nicht wirklich der beste Weg ist, aber ein etwas besseres Muster ist es:

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

Dies beendet einen Zellwert erst nach Anführungszeichen und Komma oder beginnt ihn nach einem Befehl und einem Anführungszeichen.

0voto

Kent Punkte 180747

Wie F.J. schon sagte, sind die Eingabedaten mehrdeutig. Aber für Ihr Eingabebeispiel könnten Sie versuchen

  • string.split("\",\"") Methode zum Erhalten einer String[] . Danach haben Sie ein Array mit 3 Elementen:
[
"A,B, 
2" size, 
text1,text2, text3"
]
  • das erste Zeichen (das ein Anführungszeichen ist) des ersten Elements des Arrays entfernen
  • das letzte Zeichen (das ein Anführungszeichen ist) des letzten Elements des Arrays entfernen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X