RegEx - Unerwartete print-Ausgabe bei 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
luvlinux
User
Beiträge: 33
Registriert: Donnerstag 24. August 2017, 08:53

Guten Morgen allerseits,

derzeit setze ich mich mit regex' auseinander. In folgendem Versuch wollte ich alles ausgeben was 'at' in sich hat. Hier mein Code:

Code: Alles auswählen

import re
animal_str = 'Cat rat mat pat pet'
all_animals = re.findall('[at]', animal_str)
for item in all_animals:
    print(item)
Das Ergebnis sieht wie folgt aus und hat mich allerdings sehr überrascht:
a
t
a
t
a
t
a
t
t
Process finished with exit code 0
Eventuell hätte ich noch als Ergebnis
at
at
at
at
erwartet aber nicht obiges (sieht irgendwie transponiert aus).
Wo liegt denn genau mein Fehler?

Danke für Eure Hilfe.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Eckige Klammern verknüpfen die darin enthaltenen Zeichen als ein Oder. Du willst aber ein Und. Daher sieht der passende Ausdruck so aus:

Code: Alles auswählen

re.findall('at', animal_str)
Und falls du Gruppierungen benötigst, dann macht man das mit runden Klammern:

Code: Alles auswählen

re.findall('(at)', animal_str)
Ist in diesem Zusammenhang natürlich sinnfrei, aber dein tatsächliches Vorhaben wird ja sicher ein anderes sein...
luvlinux
User
Beiträge: 33
Registriert: Donnerstag 24. August 2017, 08:53

Jetzt habe ich es verstanden.

Danke für deine Hilfe.
Antworten