substitute mit regex

Diskutiere substitute mit regex im Java Basics - Anfänger-Themen Bereich.
K

klaus1

Hallo,

Suche in einem String eine Möglichkeit statt dem Betrag einer beliebigen Währung ein paar Sterne (***) einzufügen.

Beispiel String:
xxxx
VALUEWHRG=100,00 USD
xxx

Wunsch:
xxxx
VALUEWHRG=*** USD
xxx

sozusagen ein replace mit Suche nach Betrag. Fix: VALUEWHRG zuvor und danach FIX 3 Alphanumerische Zeichen (Großbuchstaben) = währung.
danke,
 
H

httpdigest

Java:
str.replaceAll("VALUEWHRG=.*? ([A-Z]{3})", "VALUEWHRG=*** $1")
danach FIX 3 Alphanumerische Zeichen (Großbuchstaben) = währung.
Bist du sicher, dass du Alphanumerisch meinst, und nicht einfach alphabetisch? Alphanumerisch schliesst die Ziffern mit ein.
 
K

klaus1

hätte das mal so versucht:
Java:
([VALUEWHRG=]+)([0-9,. ]+)([A-Z]{3})
Java:
str.replaceAll($2,"***.***,**")
klappt das auch ?
was bedeutet .*? in Kombination ?
danke,
 
H

httpdigest

Oder:
Java:
str.replaceAll("(VALUEWHRG=).*? ([A-Z]{3})", "$1*** $2")
wenn du nicht nocheinmal VALUEWHRG= im Replacement wiederholen möchtest (sondern eine Group Reference nutzen willst).
 
K

klaus1

danke, und wenn statt VALUEWHRG= auch noch BETR1= stehen könnte ? und der betrag auch ein 1000er trennzeichen haben kann ? bspw. 1.00000,00
 
H

httpdigest

danke, und wenn statt VALUEWHRG= auch noch BETR1= stehen könnte ? und der betrag auch ein 1000er trennzeichen haben kann ? bspw. 1.00000,00
Das Tausendertrennzeichen stört nicht. Für BETR1= zusätzlich noch könnte man so lösen:
Java:
str.replaceAll("(VALUEWHRG|BETRA1)=.*? ([A-Z]{3})", "$1=*** $2")
Bei regulären Ausdrücken ist immer die Frage, wie genau/strikt und wie robust/"forgiving" die sein müssen. Z.B. müsstest du streng genommen noch nicht einmal auf VALUEWHRG oder BETRA1 prüfen, sondern z.B. einfach annehmen, dass überall, wo eine alphanumerische Folge gefolgt von einem Gleichheitszeichen gefolgt von irgendwas und dann drei alphabetische Zeichen, dein Muster ist, was du ersetzen willst.
Kommt halt auf die Daten an.

Auch sieht dein Replacement "*** USD" vom initialen Post ja ganz anders aus als das "***.***,**" in deinem anderen Post. Wenn du jetzt also noch "messen" willst, wieviele Stellen die ursprüngliche Zahl eigentlich mal hatte und dann entsprechend so viele Sterne generieren (wohl eher sicherheitskritisch?), dann wird's komplizierter.
 
Thema: 

substitute mit regex

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben