2016-11-03 7 views
-1

Hallo Ich habe die folgende Zeichenfolge:Wie extrahiert man Daten aus String-Wert mit Regex?

Country number Time Status USA B30111 11:15 ARRIVED PARIS NC0120 14:40 ON TIME DUBAI RA007 14:45 ON TIME 

Ich brauche folgende Informationen zu extrahieren:

country = USA 
number = B30111 
time = 11:15 
status = ARRIVED 

country = PARIS 
number = NC0120 
time = 14:40 
status = ON TIME 

Wie kann ich Regex verwenden, um die oben genannten Daten daraus zu extrahieren?

+0

In erster Linie können Sie die ersten gerade Aufspaltung durch Leerzeichen extrahieren, oder tun Sie regex verwenden? – Thrasher

+0

Das sieht viel mehr wie eine CSV-Datei aus, mit der Sie vorhandene Parser verwenden sollten. – 4castle

+0

Da Ihre Repräsentation 4-stellig ist, zeigt diese Frage keinen Forschungsaufwand. Sie sollten wissen, dass dies kein Code-Schreibdienst ist. – micstr

Antwort

1

Sie können dies versuchen:

(?: (\w+) ([\w\d]+) (\d+\:\d+) (ARRIVED|ON TIME)) 

Explanation

Als Status kann mehr als ein Wort halten es daher zu deutlichen nicht möglich ist, es aus dem nächsten Land, deshalb erscheint, müssen Sie hängen Sie alle möglicher Status als oder | in der Regex

Java Quelle:

final String regex = "(?: (\\w+) ([\\w\\d]+) (\\d+\\:\\d+) (ARRIVED|ON TIME))"; 
final String string = "Country number Time Status USA B30111 11:15 ARRIVED PARIS NC0120 14:40 ON TIME DUBAI RA007 14:45 ON TIME\n\n\n"; 
final Pattern pattern = Pattern.compile(regex); 
final Matcher matcher = pattern.matcher(string); 

while (matcher.find()) { 
     System.out.println("country =" + matcher.group(1)); 
     System.out.println("number =" + matcher.group(2)); 
     System.out.println("time =" + matcher.group(3)); 
     System.out.println("status =" + matcher.group(4)); 
     System.out.println(""); 
} 

Ausgang

country =USA 
number =B30111 
time =11:15 
status =ARRIVED 

country =PARIS 
number =NC0120 
time =14:40 
status =ON TIME 

country =DUBAI 
number =RA007 
time =14:45 
status =ON TIME 
+1

wow..Ich dachte fast, dass es nicht möglich und so einfach ist. Aber verdammt. Du hast es geschafft ... Großartig ... !! –

0

Wenn Sie ein Array basierend auf der Split-Funktion erstellen, haben Sie alle Wörter in diesem Array.

String[] splitted = str.split(" "); 

Dann dies zu überprüfen, versuchen Sie: -

for(String test:splitted){ 
    System.out.println(test); 
} 

Diese eher wie eine CSV-Datei aussieht.

+0

Das wird sein Problem nicht lösen. Es ist nicht so einfach .. –

+0

Dies wird nicht funktionieren im Falle von ON Time Wert – user818455

Verwandte Themen