Seite 1 von 1

re.findall.....

Verfasst: Mittwoch 13. August 2003, 09:45
von Gast
hallo zusammen!

mit

Code: Alles auswählen

re.findall("......",variable)
sollen alle zeichen gefunden werden die keine ziffern sind. allerdings sind kommazeichen erlaubt! also integer oder float.

ich habe schon einige moeglichkeiten probiert und haenge jetzt.

vielen dank fuer die hilfe.

mfg

roland

Re: re.findall.....

Verfasst: Donnerstag 14. August 2003, 17:00
von Milan
rolgal hat geschrieben:...sollen alle zeichen gefunden werden die keine ziffern sind. allerdings sind kommazeichen erlaubt! also integer oder float.
Wie jetzt? Willst du nun Integer/floats auslesen, oder alles andere? Klingt für mich irgendwie wiedersprüchlich, weil alle anderen Zeichen als Ziffern sind doch schon Kommas mit drin...

Für alle Zahlen:

Code: Alles auswählen

re.findall("\d+?\.?\d*?",text)
Für alle nicht-Zahlen fällt mir auf die schnelle nur ein Trick ein: alle Zahlen mit split finden lassen, dann werden sie aussortiert.

Code: Alles auswählen

re.split("\d+?\.?\d*?",text)

int und flloat

Verfasst: Freitag 15. August 2003, 10:59
von Gast
hi

danke mal fuer deine antwort. ich muss das mal probieren. wegen dem widerspruch: es geht um die eingabe eines gehalts in ein eingabefeld. das koennte ja z.b. folgender betrag sein: 12500. das programm macht deine eine float daraus. es koennte aber auch sein, dass der benutzter 12500.67 eingeben will. beides ist sinnvoll und soll daher erlaubt sein.

mfg


roland

Re: int und flloat

Verfasst: Freitag 15. August 2003, 11:31
von hans
rolgal hat geschrieben:Es koennte aber auch sein, dass der benutzter 12500.67 eingeben will.
oder 12500,67 oder 12.500,67 oder 12,500.67 oder ........ Das ist ein zusätzliches Problem. Ist es da nicht sinnvoller, nur ganze Zahlen zuzulassen und mit der Strungmethode isdigit() zu prüfen?

ups...

Verfasst: Freitag 15. August 2003, 11:38
von Gast
die methode kenne ich nicht. kannst du das mal ausfuehren bitte???

mfg

roland

Verfasst: Freitag 15. August 2003, 11:55
von hans
Ein Beispiel sagt mehr als 1000 Worte

Code: Alles auswählen

>>> a="123345.6"
>>> a.isdigit()
0
>>> a="123345,6"
>>> a.isdigit()
0
>>> a="123345"
>>> a.isdigit()
1
>>>
Hier die noch die Doku dazu: http://www.python.org/doc/current/lib/s ... ml#l2h-182

alles klar!

Verfasst: Freitag 15. August 2003, 12:15
von Gast
vielen dank, ich werde alles mal ausprobieren.

mfg

roland

ich habe es jetzt mal so gelöst....

Verfasst: Montag 18. August 2003, 22:47
von Gast
hi zusammen!

vielleicht interessiert es ja jmd. wie ich es schlussendlich gelöst habe oder vielleicht kann es jmd. brauchen.

Code: Alles auswählen

self.test_gehalt=re.findall("[^0-9|.]",self.gehalt)
erlaubt sind also alle zahlen und/oder . als kommazeichen.

@hans

da die eingegebene zahl nicht kleiner als 1000 sein darf, ist es nicht notwendig dem user eingaben zu erlauben, wie du sie als beispiel (12.456) angegeben hast.

die schönste lösung ist es sicher noch nicht, aber im kontext des programms momentan die sinnvollste.

abschliessend täte mich noch interessieren wie ich noch weitere zeichen angeben könnte, die erlaubt sind, also ausser dem "." auch das ","?

mfg

roland

ist unsinn

Verfasst: Montag 18. August 2003, 23:06
von Gast
ich bin grad draufgekommen, dass das ja nur oder ist. d.h. der user könnte auch den "." alleine eingeben, was ein unsinn ist.

also wie kann lässt sich das lösen?

Verfasst: Donnerstag 21. August 2003, 14:01
von Milan
Mir ist noch mal ne Idee gekommen, wie du sowohl 123 , 12.3 , .123 , 123. finden kannst:

Code: Alles auswählen

re.findall("\d+[\.,]\d*|\d*[\.,]\d+|\d+",text)

ne leider....

Verfasst: Donnerstag 21. August 2003, 18:55
von Gast
hi

. oder , allein geht trotzdem durch was ja nicht sein sollte.

mfg

roland

Verfasst: Donnerstag 21. August 2003, 19:11
von Milan
kann aber nicht, weil das "+" bei jeweils einem der \d dies verhindert:

Code: Alles auswählen

>>> import re
>>> re.findall("\d+[\.,]\d*|\d*[\.,]\d+|\d+",".")
[]

Verfasst: Freitag 22. August 2003, 08:59
von Gast
hi!

du hast ja recht. man bzw. ich sollte halt vor dem einbinden des codes in das bestehende programm das hirn einschalten. was ich ja dann gott sei dank getan habe:D

jedenfalls ist es jetzt so wie es sein soll.

vielen dank nochmal

bis bald

roland