Gerade Zahlen aus String

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
Andrin10435
User
Beiträge: 1
Registriert: Sonntag 27. Oktober 2019, 17:25

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
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Und was hast du schon probiert? Und auf welchem Datentypen kann der Modulo (Modula ist eine veraltete Programmiersprache) Operator arbeiten?
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

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.
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Was ist in diesem Kontext eine Zahl? Nehmen wir den String "x4321x". Möchtest du als Ergebnis dann "432", "42" oder "" haben?
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

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))
Sirius3
User
Beiträge: 18270
Registriert: Sonntag 21. Oktober 2012, 17:20

Gerade Zahlen kann man auch einfach mit regulären Ausdrücken ermitteln:

Code: Alles auswählen

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