Moin Moin zusammen,
ich versuche eingehende Papierrechnungen von Telekom, Vodafone und Co. automatisch auszulesen und der Buchhaltung so ein wenig die Arbeit zu erleichtern:
Inzwischen funktioniert das ganze auch relativ gut.
Das funktioniert auch relativ gut bis auf folgendes Problem:
Wir haben Mandanten, die relativ gerine Rechnungen bekommen. Dort wird der RG Betrag z.B. mit 15,02 EUR ausgelesen. etwas größere liegen dann z.B. bei 508,49 EUR aber wir haben auch die noch größeren die dann auch mal 6.985,15 EUR haben.
Wie kann der RegEx ausdruck aussehen, der alle Varianten abbildet?
Ich habe kein Problem mit 1, 2 oder dreistellen, aber sobald der der Punkt dazu kommt wird es schwierig.
Gibt es eine Möglichkeit einen Regex ausdruck zu bauen, der beide Fälle erkennen kann?
Vielen Dank
Rechnugserkennung Regex Rechnungsbetrag
Ohne inhaltliche Logik?
Eine beliebige Anzahl Ziffern, "." und "," gefolgt von einem Leerzeichen und der Zeichenkette "EUR".
Code: Alles auswählen
[\d,.]* EUR
- __blackjack__
- User
- Beiträge: 14052
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@reneschmidt: Beispielsweise r"(\d+\.)?\d+,\d{2} EUR". Das erkennt dann Zahlen mit mehr als einem Tausenderpunkt nicht mehr und erkennst auch Zahlen wo der Tausenderpunkt an der falschen Stelle steht, passt aber auf die genannten Beispiele.
Edit: Wenn man etwas systematischer an die Erstellung des regulären Ausdrucks heran geht: r"\d{1,3}(\.\d{3})*,\d{2} EUR". Das schaut auch ob die Tausenderpunkte an den richtigen Stellen stehen.
Edit: Wenn man etwas systematischer an die Erstellung des regulären Ausdrucks heran geht: r"\d{1,3}(\.\d{3})*,\d{2} EUR". Das schaut auch ob die Tausenderpunkte an den richtigen Stellen stehen.
Zuletzt geändert von __blackjack__ am Freitag 28. Februar 2020, 18:04, insgesamt 1-mal geändert.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
auf die Schnelle
Code: Alles auswählen
(\d\.\d{3})\,\d{2}|(\d{1,3})\,\d{2}
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Du hast also jeweils ein bis drei Ziffern gefolgt von beliebig vielen Gruppen von Punkt und drei Ziffern, gefolgt von Komma mit zwei Ziffern:
Wenn man Zahlen ohne Tausender-Trenner zulassen will, kann man natürlich auch den ersten Ziffernblock beliebig lang machen:
Code: Alles auswählen
r"\d{1,3}(\.\d{3})*,\d{2}\s*EUR"
Code: Alles auswählen
r"\d+(\.\d{3})*,\d{2}\s*EUR"
da ist ein "oder" dazwischen
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png