Seite 1 von 1

RegEx - Unerwartete print-Ausgabe bei findall

Verfasst: Mittwoch 13. September 2017, 07:33
von luvlinux
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.

Re: RegEx - Unerwartete print-Ausgabe bei findall

Verfasst: Mittwoch 13. September 2017, 07:41
von snafu
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...

Re: RegEx - Unerwartete print-Ausgabe bei findall

Verfasst: Mittwoch 13. September 2017, 15:35
von luvlinux
Jetzt habe ich es verstanden.

Danke für deine Hilfe.