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
In erster Linie können Sie die ersten gerade Aufspaltung durch Leerzeichen extrahieren, oder tun Sie regex verwenden? – Thrasher
Das sieht viel mehr wie eine CSV-Datei aus, mit der Sie vorhandene Parser verwenden sollten. – 4castle
Da Ihre Repräsentation 4-stellig ist, zeigt diese Frage keinen Forschungsaufwand. Sie sollten wissen, dass dies kein Code-Schreibdienst ist. – micstr