Seite 1 von 1
Regular Expressions
Verfasst: Dienstag 14. Oktober 2003, 19:10
von Dookie
Hallo Leute,
ich habe hier ein paar regular Expressions die vielleicht recht hilfreich sind
Code: Alles auswählen
RE_INT = "^[\+\-]?\d+$"
RE_FLOAT = "^([\+\-]?((\d+\.?\d*)|(\d*\.\d+)))(e|E[\+\-]?\d+)?$"
RE_NAME = "^[_a-zA-Z]+\w*$"
RE_INT sollte klar sein, erlaubt zusätzlich ein Vorzeichen.
RE_FLOAT erlaubt ein Vorzeichen und die Angabe eines Exponenten ".0" oder "0." sind auch erlaubt aber nicht nur ein "."!
RE_NAME erlaubt als ersten Zeichen nur _ und a-z bzw A-Z und als Folgezeichen alle "Wortzeichen" also auch Ziffern
Gruß
Dookie
Re: Regular Expressions
Verfasst: Dienstag 14. Oktober 2003, 20:10
von Voges
Hallo!
Bei RE_INT würde ich führende Nullen verbieten.
Bei RE_FLOAT eigentlich auch, ist aber wohl etwas aufwändiger.
Eher Kosmetik: Bei RE_NAME kannst Du das + weglassen.
Jan
Verfasst: Dienstag 14. Oktober 2003, 21:22
von Dookie
warum führende nullen verbieten, 0 ist auch ein int! 0.0 ist auch ein Float genauso wie 0. bei RE_NAME haste recht
Dookie
Verfasst: Mittwoch 15. Oktober 2003, 12:34
von Voges
Dookie hat geschrieben:warum führende nullen verbieten, 0 ist auch ein int! 0.0 ist auch ein Float genauso wie 0.
Bei "077" würde ich eher eine Okalzahl ermuten (bei einem Literal wäre es das ja), aber ich sehe gerade, dass int() ohne 2. Parameter immer von Dezimalzahlen ausgeht, egal wie viele führende Nullen. Wenn ein 'schlauer' Anwender "077" eingibt, in der Hoffnung, dass das als Oktalzahl interpretiert wird, hat er natürlich Pech.
Zumindest wenn ich Anwendereingaben kontrollieren will, würde ich schon sowas wie "007" oder "00.4" als falsch erkennen wollen, weil der Anwender vielleicht "1007" oder "100.4" meinte und nur die "1" nicht richtig erwischt hat.
Naja, ist sicherlich abhängig vom Einsatz.
Jan
Verfasst: Mittwoch 15. Oktober 2003, 13:00
von Dookie
Hi Voges,
ist eine Oktalzahl kein Int?
Desweiteren werden ints ja auch gerne verwendet um Objekte durchzunummerieren und um dann besser sortieren zu können oder auch wegen des Layouts verwende ich da gerne solche Bezeichner wie objekt_001, objekt_002 ...
Wenn würde ich bei der Benutzereingaben schon führende Nullen entfernen bzw gar nicht erst zulassen. Andererseits gibts ja auch die Möglichkeit bei Strings führende Nullen zu erzwingen.
Gruß
Dookie
Verfasst: Mittwoch 15. Oktober 2003, 13:42
von Voges
Dookie hat geschrieben:ist eine Oktalzahl kein Int?
Klar, ebenso Hex-Zahlen, die aber Dein Regexp meist nicht als gültig erkennt.
Zumindest wenn es darum ginge, gültige Zahlen zur Basis 10 zu erkennen, würde ich führende Nullen als falsch erkennen wollen (außer natürlich die 0 selbst), wenns denn Anwendereingaben sind. Bei maschinell erzeugten String a la "objekt_002" ist das natürlich nicht nötig. Wie gesagt: Fallabhängig.
Jan
Verfasst: Mittwoch 9. März 2005, 12:50
von garz
RE_FLOAT = "^([\+\-]?((\d+\.?\d*)|(\d*\.\d+)))(e|E[\+\-]?\d+)?$"
klappt meiner meinung nach nicht ganz, jedenfalls wo ich es getestet habe... so sieht meine modifikation davon aus:
erstens braucht nach dem oder-strich der fall, dass zahlen vor dem komma stehen nicht mehr beachtet werden, da der schon in der klammer vor dem oder-strich steht und zweitens ist der oder-strich für die auswahl ob kleines e oder grosses e ungünstig, besser ist da einfach ein klasse anzugeben.
das regexp ist gestestet und funktioniert.[/quote]