Seite 1 von 1

Gerade Zahlen aus String

Verfasst: Sonntag 27. Oktober 2019, 20:25
von Andrin10435
Guten Tag

Ich bin noch recht neu in Python und wollte Fragen wie ich nur die geraden Zahlen aus einem String in einen anderen String kopieren kann. Kann mir gut vorstellen es mit dem Operator Modula zu machen.

Schon mal danke im Voraus

MfG Andrin

Re: Gerade Zahlen aus String

Verfasst: Sonntag 27. Oktober 2019, 22:48
von __deets__
Und was hast du schon probiert? Und auf welchem Datentypen kann der Modulo (Modula ist eine veraltete Programmiersprache) Operator arbeiten?

Re: Gerade Zahlen aus String

Verfasst: Montag 28. Oktober 2019, 07:48
von Jankie
Also wenn es ein Fließtext ist aus dem Zahlen extrahiert werden sollen, dann würde ich mit RegEx erst einmal alle Zahlen in eine Liste schreiben (Die Funktion wäre findall() aus dem re Modul.). Dann würde ich über die Liste drüber iterieren und für jede Zahl prüfen, ob diese gerade ist (eine Möglichkeit wäre mit Modulo). Wenn die Zahl gerade ist würde ich Sie in eine neue Liste schreiben, diese Liste kannst du dann mit .join() wieder zu einem String zusammenfügen.

Re: Gerade Zahlen aus String

Verfasst: Montag 28. Oktober 2019, 08:30
von /me
Was ist in diesem Kontext eine Zahl? Nehmen wir den String "x4321x". Möchtest du als Ergebnis dann "432", "42" oder "" haben?

Re: Gerade Zahlen aus String

Verfasst: Montag 28. Oktober 2019, 16:39
von Jankie
Hier mal meine zwei Vorschläge. Beide Codes machen das gleiche, nur der obere ist etwas ausfühlicher, damit du auch nachvollziehen kannst was passiert.
Bei diesem Beispiel werden alle Zahlen in eine Liste geschreiben, die gerade sind, auch wenn diese innerhalb eines Wortes sind (z.B. "vie8len").

Code: Alles auswählen

import re

text = "Das 56 ist 55 ein 156 Te22xt mit vie7len 123 verschienden 20 Num35mer dr44in 420"
all_numbers = re.findall('\d+', text)   #liefert eine Liste zurück mit den Werten ['56', '55', '156', '22', '7', '123', '20', '35', '44', '420']
even_numbers = []                       #leere Liste in die nur gerade Zahlen geschreiben werden
for number in all_numbers:              #jeder Wert in der Liste mit allen Zahlen wird durchlaufen
    if not int(number) % 2:             #und geprüft ob ein Rest da bleibt (Wert muss invertiert werden, da Ergebnis gleich 0 und 0 bedeutet False), alternativ in den else Zweig schreiben
        even_numbers.append(number)     #fügt den Wert der Liste hinzu

new_text = " ".join(even_numbers)       #fügt die Werte zu einem String zusammen
print(new_text)
Das Ganze ein bisschen gekürzt:

Code: Alles auswählen

import re

text = "Das 56 ist 55 ein 156 Te22xt mit vie7len 123 verschienden 20 Num35mer dr44in 420"
even_numbers = [number for number in re.findall('\d+', text) if int(number) % 2 == 0]
print(" ".join(even_numbers))

Re: Gerade Zahlen aus String

Verfasst: Montag 28. Oktober 2019, 18:45
von Sirius3
Gerade Zahlen kann man auch einfach mit regulären Ausdrücken ermitteln:

Code: Alles auswählen

print(" ".join(re.findall('\d*[02468](?=\D|$)', text)))