Geldbetrag mit regex ermitteln.

MiMa

Top Contributor
Ich habe eine Methode geschrieben um einen Geldbetrag in double aus einem Text zurück zu geben.
Es wird mir kein Fehler angezeigt und die Methode läuft auch durch, jedoch ohne einen Betrag zu ermitteln?
Ich habe dann auch ein Regex Ausdruck hier im Forum probiert welcher laut Online Tool funktioniert
aber nicht in meinem Code??
regex.JPG
Ich kann aber auch keinen Fehler in meiner Methode finden?
Habe ich den Regex Ausdruck falsch implementiert?
Java:
public static double sucheBetrag(String text) {
        LOG.info("Ein Betrag wird über egex gesucht");
        double betrag = 0;
        
        // Muster für einen Betrag
        // String regexBetrag = "^\\d{1,8}([\\.,]\\d{2})?$";
        String regexBetrag = "(^\\d{1,8}([\\.,]\\d{2})?$)";
        Pattern betragMuster = Pattern.compile(regexBetrag);
        Matcher sucheBetrag = betragMuster.matcher(text);
        
        while (sucheBetrag.find()){
            betrag = Double.parseDouble(sucheBetrag.group());
            LOG.info("Betrag über regex gefunden: " + betrag);
        }
        return betrag;
    }

Danke
Mi
 
K

kneitzel

Gast
Also das kann so nicht korrekt sein auf dem Bildschirmfoto.

a) Dein Regulärer Ausdruck erwartet ja genau zwei Nachkommastellen. Daher ist 0.9 oder 0,9 kein Match. 0.99 und 0,99 matchen aber.

b) parseDouble kann nicht mit . und , umgehen. Standard ist der Punkt. Daher dürftest Du bei 0,99 eine NumberFormatException bekommen.
 

MiMa

Top Contributor
ja ich weis, die regex online Editoren sind ziemlich seltsam in der Anwendung?
Habe noch nicht viel mit regex gemacht und daher noch etwas unsicher und kenne die richtigen tools noch nicht.
Aber auch mit dem replace bekomme ich kein Wert zurück?
Das ist der Text, indem der Betrag entnommen werden soll.
Code:
Festeinband : circa EUR 49.90 (DE)
Ich habe zwar eine Methode die funktioniert, die ist aber mit Stringverarbeitung und Array.
Wollte halt eine Lösung, die auch für andere Inhalte zuverlässig funktioniert.
 

mihe7

Top Contributor
Aus dem Bauch heraus würde ich es mal so probieren:
Java:
String regexBetrag = "\\d{1,8}([.,]\\d{2})?";
 
K

kneitzel

Gast
Also wenn der Text Festeinband : circa EUR 49.90 (DE) ist, dann ist Dein Regulärer Ausdruck auch schlicht falsch.

Ich empfehle generell bei neuen Dingen doch immer erst einmal etwas über das Neue zu lesen um ein generelles Verständnis zu haben. Das bringt deutlich mehr als reines rumspielen in der Hoffnung, dass man etwas hinkriegt, das (scheinbar) funktioniert.

Zu RegEx gibt es einige Einführungen, Tutorials, ...

Bei Dir ist das Problem, dass Du auf Grund der ^ und $ Zeichen den ganzen String matchen willst.
 

MiMa

Top Contributor
Wie gesagt hatte ich die Methode schon mal programmiert und zwar mit Stringmanipulation und Arrays für die Erkennung "eines" Betrages aus einer kurzen Zeichenkette wie oben dargestellt. Dort bin ich ausgegangen das ein Buch nicht mehr kostet als ein dreistelliger Betrag mit zwei Nachkommastellen (129,58).
Da ich aber die Methode auch verwenden möchte um Beträge aus Rechnungen zu finden, wollte ich das gerne mit Regex umsetzen.
Vor einem Jahr habe ich das mit der ISBN Erkennung erfolgreich umgesetzt und das hat mich mit einer Einführung ein paar Wochen beschäftigt. Dann hat es mich ein paar Wochen gekostet in XML rein zu kommen und so zieht die Zeit dahin. Also immer ein bisschen von allem :cool:
Ich würde in der neuen Methode auch mehrere Beträge erkennen lassen wollen wie 12.345,00 ; 1.234,90 ; 1234,90 ; 123,90 ; 49.50 ; 4,9 wie oben im Online Regex Prüfer.

Und auch vielen Dank für die regex Strings, jetzt kommt schon mal der richtige Preis. :)
Ich werde mir aber trotzdem die mühe machen, eure regex Strings zu analysieren um zu sehen was diese machen, damit meine Kenntnisse erweitert werden.
 
Zuletzt bearbeitet:

JennyL

Bekanntes Mitglied
Wie gesagt,
Edit Korrektur:
Java:
String regex = "(\\d{1,3}[.,]?)(\\d{3}[.,]?)*[.,]\\d{1,2}\\D";
sollte all deine Wünsche erfüllen. :) Etwas unschön ist allerdings, dass nach dem Betrag noch wenigstens ein Zeichen folgen muss (das kann auch ein Zeilenumbruch sein) - denn dadurch ist z.B. 1,001 als nominaler Geldwert ausgeschlossen...
Analysiere das mal. :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Problem: Double als Geldbetrag - Rundungsfehler Allgemeine Java-Themen 5
H Frage regex greater than less than Allgemeine Java-Themen 7
N Regex schlägt nicht an Allgemeine Java-Themen 10
W Variable Initialisierung mit dem Ergebnis einer Regex Allgemeine Java-Themen 1
T regex case insensitive trimmed Allgemeine Java-Themen 6
S Zeichen | in regex Allgemeine Java-Themen 8
X Regex mit mehreren Bedingungen machen Allgemeine Java-Themen 5
N Hilfe bei RegEx benötigt Allgemeine Java-Themen 3
C Java17 und Regex Allgemeine Java-Themen 13
OnDemand RegEx /compilebekomme nicht die erwarteten Werte Allgemeine Java-Themen 9
N Gierigen Regex in nicht-gierigen umwandeln Allgemeine Java-Themen 4
N E-Mail Validator (ohne Regex!) Allgemeine Java-Themen 7
OnDemand Regex von bis Allgemeine Java-Themen 6
W Versionsnummer auslesen - Regex ist zickig Allgemeine Java-Themen 2
L RegEx für Teile einer Berechnung Allgemeine Java-Themen 14
G Regex Allgemeine Java-Themen 2
L regex ganzer string? Allgemeine Java-Themen 2
W RegEx Stringliteral finden - Jflex Allgemeine Java-Themen 5
D Regex Probleme Allgemeine Java-Themen 2
Kirby.exe Regex charakter ignorieren Allgemeine Java-Themen 12
S Java SAT (Haltbarkeitsproblem) mit Regex Allgemeine Java-Themen 6
S [Regex] Nur diese Zeichen beachten Allgemeine Java-Themen 1
M Bitte Hilfe mit REGEX (Negieren) Allgemeine Java-Themen 4
J Compilerfehler bis in java.util.regex.Pattern... Allgemeine Java-Themen 2
C PDFBox: Nach RegEx ganze Zeile Allgemeine Java-Themen 4
S Regex mit UND-Verknüpfung Allgemeine Java-Themen 1
P RegEx für Zeiten Allgemeine Java-Themen 7
D Regex: Komplettes Wort bekommen Allgemeine Java-Themen 3
Neumi5694 Operatoren regEx für das Erstellen eines Strings verwenden Allgemeine Java-Themen 3
P RegEx Allgemeine Java-Themen 3
W String Parsen und auf eigenes Muster anwenden (kein Regex) Allgemeine Java-Themen 11
Y regex | n-faches Vorkommen oder gar keins Allgemeine Java-Themen 6
turmaline Regex gegen Regex prüfen Allgemeine Java-Themen 4
HarleyDavidson Regex - Optimierung Allgemeine Java-Themen 4
M Regex für Zahleneingabe in JavaFX Textfield Allgemeine Java-Themen 18
T Best Practice Wortregeln RegEx Allgemeine Java-Themen 11
A ALTER TABLE mit Hilfe von RegEx zerlegen, splitten Allgemeine Java-Themen 5
H Interpreter-Fehler Regex kompiliert nicht Allgemeine Java-Themen 5
M RegEx alle Matches ausgeben Allgemeine Java-Themen 5
Iron Monkey Mit Regex nach Beträge suchen Allgemeine Java-Themen 4
T REGEX Erklaerung Allgemeine Java-Themen 14
T Nur innerhalb des regex-Match ersetzen Allgemeine Java-Themen 9
H Pic Download / Regex Problem Allgemeine Java-Themen 7
F Frage zu Regex möglich Allgemeine Java-Themen 4
M Regex... mal wieder Allgemeine Java-Themen 3
H RegEx - Ersetze alles bis Leerzeichen Allgemeine Java-Themen 5
S regex verbrät CPU Allgemeine Java-Themen 6
V Regex Bereichs Filter Allgemeine Java-Themen 4
127.0.0.1 RegEx _ und 0-9 Allgemeine Java-Themen 45
S Entfernen von allen Nicht-Buchstaben chars aus einem String ohne Regex..? Allgemeine Java-Themen 10
P Java String Regex Allgemeine Java-Themen 2
AyKay Regex XPath Allgemeine Java-Themen 4
C Regex (Case insensitive und Umlaute) Allgemeine Java-Themen 4
D Regex Raute erkennen Allgemeine Java-Themen 2
nrg Zweistelligen Zahlenbereich mit RegEx Allgemeine Java-Themen 8
GilbertGrape Regex-Problem Allgemeine Java-Themen 2
W Denkblockade RegEx Allgemeine Java-Themen 2
S eigene regEx schreiben Allgemeine Java-Themen 4
C Regex expandieren Allgemeine Java-Themen 6
C Regex Überschniedung von Ausdrücken Allgemeine Java-Themen 16
reibi RegEX - Teilstring Allgemeine Java-Themen 6
R Java-RegEx terminiert nicht Allgemeine Java-Themen 3
M Regex: Ich stehe auf dem Schlauch Allgemeine Java-Themen 2
V Kleines Regex-Problem Allgemeine Java-Themen 3
B Regex "Problem" Allgemeine Java-Themen 4
B RegEx: (Um-)formulieren eines Pattern zur Identifizierung komplexer URLs Allgemeine Java-Themen 7
P RegEx mit HTML Parser für Java möglich? Allgemeine Java-Themen 10
J Regex: Fertige URLS aus Javascript Allgemeine Java-Themen 3
N Java regex Allgemeine Java-Themen 5
K Regex JSON Allgemeine Java-Themen 3
J RegEx Ausdruck Allgemeine Java-Themen 2
J Regex: URLS aus CSS Allgemeine Java-Themen 2
G RegEx- Ausdruck Allgemeine Java-Themen 4
G RegEx kein Unterstrich Allgemeine Java-Themen 2
A Text via RegEx durchsuchen und teile ersetzten Allgemeine Java-Themen 5
C Regex: Zahl ohne führende Null Allgemeine Java-Themen 13
W RegEx Zeile parsen Medium Allgemeine Java-Themen 8
X Java String Regex - Sonderzeichen Filtern Allgemeine Java-Themen 5
S Dateiname mit Regex parsen Allgemeine Java-Themen 3
Loyd Noch ne Regex-Frage: Verschachtelte Ausdrücke Allgemeine Java-Themen 4
R Java Regex Frage Allgemeine Java-Themen 17
Daniel_L RegEx-Frage: Ersetzen in UBB ausschließen Allgemeine Java-Themen 2
M Große Datei mit Regex durchsuchen Allgemeine Java-Themen 4
S regex für einen Link Allgemeine Java-Themen 3
E Regex alles nach ? löschen Allgemeine Java-Themen 4
M RegEx-Frage Allgemeine Java-Themen 2
R Regex Tokenizer Allgemeine Java-Themen 11
E Regex HTML Tag und Inhalt löschen Allgemeine Java-Themen 4
H RegEX und eMail Allgemeine Java-Themen 4
L-ectron-X Regex zum Entfernen von mehrzeiligen Kommentaren Allgemeine Java-Themen 2
martin82 Regex - JTable - Filter Allgemeine Java-Themen 10
nrg Kleine Hilfe mit RegEx Allgemeine Java-Themen 2
B Regex-Fehler nach lib-Update Allgemeine Java-Themen 2
K Contrains oder Regex Allgemeine Java-Themen 3
J replaceAll , "[", "]" & regex Allgemeine Java-Themen 12
P RegEx und $-Zeichen als Literal Allgemeine Java-Themen 5
P RegEx - Worte ausschließen Allgemeine Java-Themen 8
S Regex - was isst denn {javaLetter} und {javaDigit}? Allgemeine Java-Themen 2
D Wie werden Regex-Gruppen kompiliert? Allgemeine Java-Themen 2
Stillmatic RegEx Matches ausgeben Allgemeine Java-Themen 10

Ähnliche Java Themen

Neue Themen


Oben