Regular Expression für Zinssatz

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
MightyJ

Hallo zusammen!

Ich hab mal eine Frage bezüglich RE... Und zwar möchte ich selbige in meinem Programm benutzen, um einen Zinssatz zu überprüfen. Dieser Zinssatz kann wie folgt aufgebaut sein:

- minimal eine und maximal 2 numerische Vorkommastellen
- anschließend kann ein Punkt kommen, auf den aber auf jeden Fall noch eine Zahl folgen muss, wenn er gültig sein soll
- wenn . und Zahl vorhanden waren, dann können noch 2 Zahlen kommen

Um das jetzt zu realisieren, habe ich das ganze wie folgt gemacht:

Code: Alles auswählen

_zinssatz = re.compile(r"[0-9]{1,2}?((\.(?=[0-9]))?[0-9]{0,2})")
Leider funktioniert das aber irgendwie gar nicht :-( Seltsamerweise werden dabei alle Strings als korrekt angesehen, bei denen nur Zahlen und ggf. der Punkt vorkommen. Also auch "2." ist gültig. Oder auch "414309842". Finde ich alles sehr komisch und kann ich mir ehrlich gesagt nicht erklären...

Kann mir da vielleicht jemand von euch weiterhelfen und mir sagen, wie ich die RE aufbauen muss, damit nur Zinssätze als korrekt angesehen werden, die dem oben genannten Muster entsprechen?

Wäre sehr nett, danke schon mal im Voraus :-)

MfG
MightyJ

P.S. Bin noch ein ziemlicher Neuling auf dem Gebiet der RE...
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Hi. Also mit den (?=...) hab ich noch nie gearbeitet. Kann durchaus sein, dass hier irgendwo der Fehler liegt. Aber das lässt sich ja auch leicht umgehen, indem man den "oder"-Operator einsetzt:

Code: Alles auswählen

_zinssatz = re.compile("^[0-9]{1,2}$|^[0-9]{1,2}\.[0-9]{1,3}$")
#hier noch kompakter:
_zinssatz = re.compile("^[0-9]{1,2}(?:\.[0-9]{1,3})?$")
Aber noch was anderes, was relevant ist: wie benutzt du deine regex? Momentan liefert sie ja nur korrekte Ergebnisse bei match (meine oben nicht, da Anfang und Ende definiert sind).

Milan
Gast

Hallo Milan!

Erstmal vielen Dank für deine Hilfe, jetzt funktioniert es wunderbar :-) Werde mich damit wohl noch mal ein wenig intensiver beschäftigen müssen...

Ich benutze meine RE, um zu testen, ob in einem Entry ein korrekter Wert eingetragen wurde. Von daher denke ich, dass korrekte Ergebnisse bei match ausreichen, da ich ja nichts irgendwie durchsuchen will und der eingegebene Wert auch genau mit meiner RE übereinstimmen muss, damit ich ihn als gültig weiterverarbeite.

Noch mal danke und frohe Ostern :-)

MfG
MightyJ
Antworten