2012-11-14 20 views
7

Ich habe die Seiten und Seiten der Google-Ergebnisse durchgesehen, bin aber auf nichts gestoßen, das mir helfen könnte.Java (Regex?) Split-String zwischen Zahl/Buchstabenkombination

Was ich versuche zu tun ist eine Zeichenfolge wie Bananas22Apples496Pears3 zu teilen, und gliedern Sie es in eine Art lesbares Format. Da String.split() dies nicht tun kann, habe ich mich gefragt, ob jemand mich auf einen Regex-Ausschnitt verweisen könnte, der dies erreichen könnte.

ein wenig zu erweitern: Die obige Zeichenfolge in würde gespalten (String[] der Einfachheit halber):

{"Bananas:22", "Apples:496", "Pears:3"} 

Antwort

4

Versuchen Sie, diese

String s = "Bananas22Apples496Pears3"; 

String[] res = s.replaceAll("(?<=\\p{L})(?=\\d)", ":").split("(?<=\\d)(?=\\p{L})"); 
    for (String t : res) { 
     System.out.println(t); 
    } 

Der erste Schritt mit dem leeren String zu ersetzen, wäre ein „:“, wenn auf der linken Seite ein Brief mit den lookbehind assertion(?<=\\p{L}) und auf dem rechten Seite ist eine Ziffer, mit der lookahead assertion(?=\\d).

Dann teilen Sie das Ergebnis, wenn auf der linken Seite ist eine Ziffer und auf der rechten Seite ist ein Buchstabe.

\\p{L} ist ein Unicode property, der jedem Buchstaben in jeder Sprache entspricht.

3

Sie zu Replace benötigen und split dann die string.You kann es nicht allein mit dem geteilten tun

1>Replace All die Zeichenfolge mit der folgenden regex

(\\w+?)(\\d+) 

und ersetzen sie durch

$1:$2 

2> Jetzt Split es mit dieser Regex

(?<=\\d)(?=[a-zA-Z]) 
+0

ich mit Regex nicht gerade heiß bin, habe ich versucht, ein Pattern.compile dieses Muster verwenden, aber ich erhalte eine „ungültige Escape-Sequenz“ Fehler. – Timr

+0

@Timr Sie entkam es nicht so "" \\ w +? \\ d + "' – Anirudha

+0

@Timr würde es sicherlich helfen, wenn Sie die Java-Muster Beispiele lesen würden. Ich wette, sie bringen dir bei, auch zu entkommen ... –

0

ersetzen \d+ durch :$0 und spaltete dann bei (?=[a-zA-Z]+:\d+).

+0

'$ 1' sollte' $ 0' sein – Anirudha

1

Dies sollte das tun, was Sie wollen:

import java.util.regex.*; 

String d = "Bananas22Apples496Pears3" 

Pattern p = Pattern.compile("[A-Za-z]+|[0-9]+"); 

Matcher m = p.matcher(d); 

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

// Bananas 
// 22 
// Apples 
// 496 
// Pears 
// 3 
0
String myText = "Bananas22Apples496Pears3"; 
System.out.println(myText.replaceAll("([A-Za-z]+)([0-9]+)", "$1:$2,"));