2012-11-14 8 views
7

Przeglądałem strony i strony wyników Google, ale nie natrafiłem na nic, co mogłoby mi pomóc.Rozdzielony ciąg znaków Java (Regex?) Między kombinacją liczba/litera

Co próbuję zrobić, to podzielić ciąg znaków, taki jak Bananas22Apples496Pears3, i podzielić go na jakiś czytelny format. Ponieważ String.split() nie może tego zrobić, zastanawiałem się, czy ktoś może wskazać mi fragment kodu regex, który mógłby to zrobić.

Rozszerzając trochę: powyższy ciąg będzie podzielony na (String[] dla uproszczenia):

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

Odpowiedz

4

Spróbuj

String s = "Bananas22Apples496Pears3"; 

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

Pierwszym krokiem byłoby zastąpić pusty łańcuch z „:”, gdy po lewej stronie jest list z lookbehind assertion(?<=\\p{L}) a po prawej stronie jest cyfrą, z lookahead assertion(?=\\d).

Następnie podziel wynik, gdy po lewej stronie znajduje się cyfra, a po prawej - litera.

\\p{L} to Unicode property pasujący do każdej litery w każdym języku.

3

Trzeba Replace a następnie split string.You nie można zrobić z podziałem sam

1>Replace All napis o następującej regex

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

i zastąpić go

$1:$2 

2> Teraz Split go z tym regex

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

Nie jestem dokładnie na gorąco z Regex, próbowałem pattern.compile używając tego wzoru, ale pojawia się „Nieprawidłowa sekwencja ucieczki” błąd. – Timr

+0

@Timr nie uniknąłeś tego w ten sposób "\\ w +? \\ d +" ' – Anirudha

+0

@Timr z pewnością pomógłbyś, gdybyś zapoznał się z przykładami Java Pattern. Założę się, że uczą cię ucieczki też ... –

0

Wymień \d+ przez :$0 a następnie podzielić na (?=[a-zA-Z]+:\d+).

+0

'$ 1' powinno być' 0 $' – Anirudha

1

ten powinien robić to, co chcesz:

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,")); 
Powiązane problemy