2012-06-27 18 views
6

Wenn ich eine Zeichenfolge wie „11E12C108N“ haben, die eine Verkettung von Buchstabengruppen und Zahlengruppen ist, wie kann ich spalten sie ohne Trennzeichen Leerzeichen dazwischen?Regex aufgeteilt Zahlen und Buchstabengruppen ohne Leerzeichen

Zum Beispiel möchte ich die resultierende Spaltung sein:

tokens[0] = "11" 
tokens[1] = "E" 
tokens[2] = "12" 
tokens[3] = "C" 
tokens[4] = "108" 
tokens[5] = "N" 

ich jetzt dieses Recht haben.

public static void main(String[] args) { 

    String stringToSplit = "11E12C108N"; 

    Pattern pattern = Pattern.compile("\\d+\\D+"); 
    Matcher matcher = pattern.matcher(stringToSplit); 

    while (matcher.find()) { 
     System.out.println(matcher.group()); 
    } 
} 

Was mich gibt:

11E 
12C 
108N 

Kann ich die ursprüngliche regex in einem Rutsch eine vollständige Spaltung zu tun? Anstatt die regex wieder auf den Zwischen Token laufen zu müssen?

Antwort

5

Verwenden Sie die folgende regex und eine Liste aller Spiele bekommen. Das werden Sie suchen.

\d+|\D+ 

In Java, ich denke, der Code wie folgt aussehen würde:

Matcher matcher = Pattern.compile("\\d+|\\D+").matcher(theString); 
while (matcher.find()) 
{ 
    // append matcher.group() to your list 
} 
3

Sie in Split regex "look around"

String stringToSplit = "11E12C108N"; 
String[] tokens = stringToSplit .split("(?<=\\d)(?=\\D)|(?=\\d)(?<=\\D)"); 
System.out.println(Arrays.toString(tokens)); 

aus [11, E, 12, C, 108, N]

können auch

Idee ist, an Stellen zu teilen, die zwischen Ziffer sind (\d) und Nicht-Ziffern (\D). Mit anderen Worten ist es Platz (leere Zeichenkette), die haben:

  • Ziffer vor (?<=\d) und Nicht-Ziffer, nachdem es (?=\D)
  • Nicht-Ziffer vor (?<=\D) und Stelle nach dem es (?=\d)

Mehr Infos über (?<=..) und (?=..) (und einige mehr) können Sie unter http://www.regular-expressions.info/lookaround.html

finden
Verwandte Themen