Falsches Ergebnis bei regulären Ausdrücken

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
Alfons
User
Beiträge: 7
Registriert: Montag 18. Februar 2019, 16:08

Hallo zusammen,

für die nachfolgenden Beispiele verwendete ich Python 3.7 auf einem Win 10 - Rechner.

Code: Alles auswählen

import re

#Beispiel 1: a sollte 1-5 mal wiederholbar sein
if re.search(r"a{1,5}re", "aaaaaare"):
    print ("Suche 1: übereinstimmend")
else:
    print ("Suche 1: nicht übereinstimmend")

#Beispiel 2: [a] sollte genau 2 mal wiederholbar sein
if re.search(r"[a]{2}de", "aaaaaade"):
    print ("Suche 2: übereinstimmend")
else:
    print ("Suche 2: nicht übereinstimmend")

#Beispiel 3: [Yy] sollte genau 1 mal wiederholbar sein  
if re.search(r"[Yy]{1}thon", "yyython"):
    print ("Suche 3: übereinstimmend")
else:
    print ("Suche 3: nicht übereinstimmend")

Bei allen drei Abfragen wird "... übereinstimmend" ausgegeben.
Das dürfte doch nicht sein.
In Beispiel 1 kommt das a sechs mal vor, meine Abfrage will aber 1 bis maximal 5 mal ein 'a'.
Ganz ähnlich verhält es sich für die nächsten zwei Beispiele.
Habe ich einen Logikfehler oder sonst etwas falsches programmiert?
Ich suche keinen Workaround, sondern den Grund für dieses Verhalten.

Vielen Dank für die Hilfe

Alfons
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

`search` sucht den Ausdruck im gesamten String, und `aade` kommt ab dem 4. Zeichen des Strings vor.
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

Und da du dem Ausdruck sagst, dass dir egal ist, was vor dem gefundenen String steht (bzw. du nicht explizit sagst, dass es dir nicht egal ist), wird dort auch alles ignoriert.
Alfons
User
Beiträge: 7
Registriert: Montag 18. Februar 2019, 16:08

Vielen Dank.
Mein Fehler.
search sucht im gesamten String und nicht nur am Anfang.
Damit hat sich alles geklärt.
Ich hätte match verwenden müssen.

Gruß
Alfons
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Ich hätte match verwenden müssen.
Oder z.B. `^a{1,5}re` als Ausdruck. Dann wird auch nach 1-5 a gefolgt von re am Anfang des Strings gesucht.

Gruß, noisefloor
Benutzeravatar
snafu
User
Beiträge: 6741
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Alfons hat geschrieben: Montag 12. August 2019, 11:12 Ich hätte match verwenden müssen.
Oder fullmatch() wenn es ganz genau sein soll.
Antworten