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
Gerade Zahlen aus String
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.
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").
Das Ganze ein bisschen gekürzt:
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)
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))
Gerade Zahlen kann man auch einfach mit regulären Ausdrücken ermitteln:
Code: Alles auswählen
print(" ".join(re.findall('\d*[02468](?=\D|$)', text)))