2016-04-19 16 views
1

Ich bin neu bei regulären Ausdrücken und ich habe einen Ausdruck, den ich für die Arbeit schreiben muss. Ich habe mit replaceAll() versucht, dies zu tun, aber ich bin mir nicht sicher, ob ich tun kann, was ich mit einem regulären Ausdruck vorschlage.Kombinieren von zwei regulären Ausdrücken mit replaceAll()

Ich muss eine Zeichenfolge im Format "abc12378" zu "$$$ $$$ 78" ändern. Ich kann dies tun mit zwei verschiedenen regulären Ausdrücken ohne Frage:

  • String:"abc12378"
  • RegEx:"([1-6])"
  • Ersatz:"\$"
  • Ergebnis:"$$$$$$78"

Oder

  • String:"$$$$$$78"
  • RegEx:"(.{3})"
  • Ersatz:"$1 "
  • Ergebnis:$$$ $$$ 78

Möchten Sie wissen, ob ich das mit einem kombinierten replaceAll tun können()?

Jede Hilfe würde sehr geschätzt werden.

+0

Sie drei Zeichen von '$$$ ersetzen kann'. [Finden: '(. {3})'. Ersetzen: '$$$'] (https://regex101.com/r/sT4lT0/1) – Tushar

+1

https://regex101.com/r/uE3gD5/2 – rock321987

+0

Sie haben keine Informationen über die Zeichenfolge, die Sie angegeben erwartet oder die Zeichenfolge, mit der Sie es ersetzen möchten. Müssen Sie nur die ersten 6 Zeichen ersetzen? Was ist, wenn die Zeichenfolge nicht 6 Zeichen enthält? Warum hast du '[1-6]' benutzt? bedeutet das, dass Sie erwarten, dass die ersten 3 Ziffern der Zahl kleiner als 6 sind? – 11thdimension

Antwort

0

Dieser einzelne replaceAll Aufruf tun, was Sie wollen, in der Tat einfach jede Gruppe von drei alphanumerischen Zeichen von "$$$ " ersetzt:

String s = "abc12378"; 
System.out.println(s.replaceAll("[a-z0-9]{3}", "\\$\\$\\$ ")); 

Ausgabe

$$$ $$$ 78 

Unter der Annahme, dass Sie mehr Charakter haben ein , hier ist, wie Sie vorgehen sollten:

String s = "123456789"; 
System.out.println(s.replaceAll("[a-z0-9]{3}(?!$)", "\\$\\$\\$ ")); 

Ausgabe

$$$ $$$ 789 
+0

Nur aus Neugier (für zukünftige Referenz) - Was wäre, wenn die letzten drei Ziffern in Dreiergruppen wären? z.B. 123456789. Dies würde nicht funktionieren, denn es würde nur XXX XXX XXX statt XXX XXX 789 – Oaryx

+0

Mögliche Duplikat: http://StackOverflow.com/Questions/17969436/Java-Regex-Capturing-Gruppen – menssana

+0

Sie einfach verwenden der gleiche Ansatz, aber auf einer Teilzeichenfolge von 0 bis Länge - 3, dann fügen Sie die letzten 3 Zeichen an ihn an. –

Verwandte Themen