re.findall.....

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
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
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

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)
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
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

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?
Gast

die methode kenne ich nicht. kannst du das mal ausfuehren bitte???

mfg

roland
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

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
Gast

vielen dank, ich werde alles mal ausprobieren.

mfg

roland
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
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?
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

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)
Gast

hi

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

mfg

roland
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

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+",".")
[]
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
Antworten