2014-05-09 14 views
7

ho bisogno di togliere gli spazi tra solo i numeri, in modo che una stringa come questa:Regex per rimuovere gli spazi tra i numeri solo

"Hello 111 222 333 World!" 

diventa

"Hello 111222333 World!" 

Ho provato questo:

message = message.replaceAll("[\\d+](\\s+)[\\d+]", ""); 

Non sembra averlo fatto.

+0

Cosa fa questa procedura fare? – stmfunk

+0

@stmfunk cerca di estrarre i numeri di telefono riformattando tutti i numeri in un unico formato, quindi li estrae –

risposta

16

È possibile utilizzare questa espressione regolare basata Lookaround:

String repl = "Hello 111 222 333 World!".replaceAll("(?<=\\d) +(?=\\d)", ""); 
//=> Hello 111222333 World! 

Questa espressione regolare "(?<=\\d) +(?=\\d)" fa in modo di corrispondere a uno spazio che si preceduto e seguito da una cifra.

+0

Sì, funzionerà anche, ho pensato che i lookaround funzioneranno più o meno come i gruppi catturati. Ma penso che questa domanda non riguardi l'esecuzione di benchmark delle prestazioni su entrambi gli approcci, potrei aver modificato la mia risposta per includere questa opzione ma ora che l'altra risposta la copre già, lascerò così com'è. – anubhava

+0

E, naturalmente, ci sono luoghi in cui l'approccio lookaround funzionerà, ma l'approccio di acquisizione non può. Comunque, il mio punto era principalmente che la performance era (le mani delle onde) abbastanza la stessa per la maggior parte degli scopi. –

+2

Ma come potete vedere qui: 'http: // regex101.com/r/zL6yH3' che' 1 2 3' non può diventare '123' con' (\\ d) (\\ d) ' – anubhava

0

ne dite:

message = "Hello 111 222 333 World!".replaceAll("(\\d)\\s(\\d)", "$1$2"); 

Dà:

"Hello 111222333 World!" 
+3

Che dire di [Hello 1 2 3 World!] (http://regex101.com/r/tL7hR9) –

Problemi correlati