2012-11-14 18 views
7

Ho cercato tra le pagine e le pagine dei risultati di Google ma non ho trovato nulla che potesse aiutarmi.Stringa Java (Regex?) Tra combinazione numero/lettera

Quello che sto cercando di fare è dividere una stringa come Bananas22Apples496Pears3 e scomporla in una sorta di formato leggibile. Dal momento che il String.split() non è in grado di farlo, mi chiedevo se qualcuno potesse indicarmi uno snippet regex che potesse ottenere questo risultato.

espansione un po ': la stringa di cui sopra sarebbe diviso in (String[] per semplicità):

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

risposta

4

Prova questa

String s = "Bananas22Apples496Pears3"; 

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

Il primo passo sarebbe quello di sostituire la stringa vuota con un ":", quando sulla sinistra è una lettera con il lookbehind assertion(?<=\\p{L}) e sulla destra è una cifra, con la lookahead assertion(?=\\d).

Quindi dividere il risultato, quando a sinistra è una cifra e sulla destra è una lettera.

\\p{L} è un Unicode property che corrisponde a ogni lettera in ogni lingua.

3

È necessario Replace e poi split lo string.You non può farlo con la scissione da solo

1>Replace All la stringa con la seguente espressione regolare

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

e sostituirlo con

$1:$2 

2> Ora Split con questa regex

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

Non sono esattamente caldo con Regex, ho provato un Pattern.compile utilizzando tale modello, ma ottengo un errore "non valido sequenza di escape". – Timr

+0

@Timr non l'hai sfuggito come questo '" \\ w +? \\ d + "' – Anirudha

+0

@Timr sarebbe di certo di aiuto se dovessi leggere gli esempi di Pattern Java. Scommetto che ti hanno insegnato a fuggire, anche ... –

0

Sostituire \d+ da :$0 e poi dividere in (?=[a-zA-Z]+:\d+).

+0

'$ 1' dovrebbe essere' $ 0' – Anirudha

1

Questo dovrebbe fare quello che vuoi:

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,")); 
Problemi correlati