Rechnugserkennung Regex Rechnungsbetrag

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
reneschmidt
User
Beiträge: 48
Registriert: Montag 4. Januar 2016, 15:14

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
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Ohne inhaltliche Logik?

Code: Alles auswählen

[\d,.]* EUR
Eine beliebige Anzahl Ziffern, "." und "," gefolgt von einem Leerzeichen und der Zeichenkette "EUR".
Benutzeravatar
__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.
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
Benutzeravatar
ThomasL
User
Beiträge: 1379
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

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
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Du hast also jeweils ein bis drei Ziffern gefolgt von beliebig vielen Gruppen von Punkt und drei Ziffern, gefolgt von Komma mit zwei Ziffern:

Code: Alles auswählen

r"\d{1,3}(\.\d{3})*,\d{2}\s*EUR"
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+(\.\d{3})*,\d{2}\s*EUR"
Benutzeravatar
ThomasL
User
Beiträge: 1379
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

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
Antworten