2014-05-09 13 views
7

Ich brauche nur die Räume zwischen Zahlen zu entfernen, so dass eine Zeichenfolge wie folgt:Regex entfernen Sie Leerzeichen zwischen den Zahlen nur

"Hello 111 222 333 World!" 

"Hello 111222333 World!" 

wird ich dies habe versucht:

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

Scheint nicht, es zu tun.

+0

Was bedeutet das Verfahren tun? – stmfunk

+0

@stmfunk versucht, Telefonnummern durch Neuformatierung aller Zahlen in ein einziges Format zu extrahieren, dann Extrahieren –

Antwort

16

können Sie diese Lookarounds basierte regex verwenden:

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

Diese Regex "(?<=\\d) +(?=\\d)" stellt sicher, Platz zu entsprechen, die durch eine Ziffer sind vorangestellt und.

+0

Ja, das wird auch funktionieren, dachte ich, dass Lookarounds so ziemlich wie erfasste Gruppen durchführen werden. Aber ich denke, in dieser Frage geht es nicht darum, Performance-Benchmarks für beide Ansätze zu erstellen, ich hätte meine Antwort so bearbeiten können, dass sie diese Option enthält, aber jetzt, da die andere Antwort sie bereits behandelt, werde ich so bleiben wie sie ist. – anubhava

+0

Und natürlich gibt es Orte, an denen der Lookaround-Ansatz funktioniert, aber der Capture-Ansatz nicht. Jedenfalls ging es mir primär darum, dass die Performance für die meisten Zwecke (Wellenhände) genug war. –

+2

Aber wie Sie hier sehen können: 'http: // regex101.com/r/zL6yH3', dass' 1 2 3 'nicht' 123' werden kann mit '(\\ d)' – anubhava

0

Wie wäre:

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

Gibt:

"Hello 111222333 World!" 
+3

Was ist mit [Hallo 1 2 3 Welt!] (http://regex101.com/r/tL7hR9) –

Verwandte Themen