2016-10-19 3 views
1

Sorry, wenn diese Frage bereits gelöst wurde, oder geschlossen, aber ich habe lange gesucht, ohne eine Antwort.Java split regexp wenn delimiter ist Teil der Daten

Ich muss Zeilen teilen, die ich von einem externen System empfange, mit dem ~ Trennzeichen.

Ich habe ein Problem, weil einige Daten enthalten ~~ (~ zweimal wiederholt) und in diesem Fall dürfen die Daten nicht aufgeteilt werden.

Also, wenn ich A~B~C~~C~D erhalten Ich möchte diese Spaltung zurück: A, B, C~~C, D

ich kann nicht herausfinden, was regulären Ausdruck habe ich nicht verwendet ~~ aufzuspalten.

+0

Was ist Ihre aktuelle Regex? –

+1

Da ich Randfälle liebe - was mit 'A ~ B ~~~ C' geschehen sollte –

+0

war mein Regexp nur" ~ ". Über die Randfälle A ~ B ~~~ C wird es nie passieren. Wir hätten stattdessen A ~ B ~~ C und sollten als A geteilt werden, B ~~ C – Gilles

Antwort

0

Sie (?<!~)~(?!~) mit einem negativen Vorgriffs und schauen Hinterher für ~ nutzen können.

Beispiel

String test = "A~B~C~~D~E"; 
System.out.println(
    Arrays.toString(
     test.split("(?<!~)~(?!~)") 
    ) 
); 

Output

[A, B, C~~D, E] 

Dies auch mit mehr als zwei aufeinanderfolgende ~ s arbeiten soll, z.B. mit "A~B~C~~~D~E".

+0

Dieser funktioniert. Vielen Dank – Gilles

+0

@Gilles du bist willkommen. – Mena

2

können Sie von

\b~\b 

Siehe Demo aufgeteilt.

https://regex101.com/r/t3D2Jp/1

können Sie

(?:^|\b)~(?:$|\b) 

verwenden, wenn Sie Hinter diejenigen

entfernen möchten
+1

Sie können auch das nachgestellte '~', dh 'b ~ a ~', erhalten. In diesem Fall können Sie schreiben '(^ | \ b) ~ ($ | \ b)' – flakes

+0

@flkes thanx hinzugefügt – vks

+0

Ich denke, die Gruppen nicht erfassen hier ist überflüssig? – flakes