2016-05-06 28 views
0

Ich bin für regex suchen, um die folgenden in Java zu tun:Java Regex - Zerlegt eine Zeichenkette auf Räume - ohne Leerzeichen in Anführungszeichen und entkam Anführungszeichen

String originalString = ""; 
String splitString[] = originalString.spilt(regex); 

Einige Testfälle:

Original1: foo bar "simple" 
Spilt1: { "foo", "bar", "\"simple\"" } 

Original2: foo bar "harder \"case" 
Spilt2: { "foo", "bar", "\"harder \"case\"" } 

Original3: foo bar "harder case\\" 
Spilt3: { "foo", "bar", "\"harder case\\"" } 

Einige Schnipsel, auf die ich gestoßen bin:

# Does not react to escaped quotes 
(?=([^\"]*\"[^\"]*\")*[^\"]*$) 
# Finds relevant quotes that surround args 
(?<!\\)(?:\\{2})*\" 

Vielen Dank!

+1

Gibt es dort eine Frage, die ich nicht sehe? – Andreas

+0

@Andreas Ich suche nach Regex, die die Leerzeichen finden, auf denen die Saiten aufgeteilt werden müssen. – deadfire19

+1

Ich habe dafür gestimmt, deine Frage als Duplikat zu schließen, aber da die angegebene Lösung nicht 'split' Methode, sondern' Matcher # find' benutzt, lass es mich wissen, wenn du sie nicht benutzen willst und deine Frage wiedereröffnet werden soll rein 'Split (regex)' Lösung. – Pshemo

Antwort

0
String stringToSplit = This is the string to split; 

String[] split = stringToSplit.split("character to split at"); 

In diesem Fall split[0] würde als 'Dieses' split[1] 'ist' wäre, split[2] 'die', split[3] 'string' split[4] 'auf' split[5] 'split' wäre. An diesem Punkt

können Sie tun

var0 = split[0]; 
var1 = split[1]; 
var2 = split[2]; 

Wo var0 würde "dieses" Und so weiter gleich ...

Hoffnung, das hilft.

+0

Beachten Sie, dass das erste Teilstück im Array als 0 und nicht als 1 platziert wird. –

1

Regex wie diese werden für einfache Fälle arbeiten:

("(.+?)(?<![^\\]\\)")|\S+ 

Aber ich würde nicht RegEx vorschlagen für diese Aufgabe zu verwenden, sondern stattdessen einen Blick auf CSV-Parser nehmen.