Seite 1 von 1

Falsches Ergebnis bei regulären Ausdrücken

Verfasst: Montag 12. August 2019, 09:38
von Alfons
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

Re: Falsches Ergebnis bei regulären Ausdrücken

Verfasst: Montag 12. August 2019, 09:41
von Sirius3
`search` sucht den Ausdruck im gesamten String, und `aade` kommt ab dem 4. Zeichen des Strings vor.

Re: Falsches Ergebnis bei regulären Ausdrücken

Verfasst: Montag 12. August 2019, 09:56
von sparrow
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.

Re: Falsches Ergebnis bei regulären Ausdrücken

Verfasst: Montag 12. August 2019, 11:12
von Alfons
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

Re: Falsches Ergebnis bei regulären Ausdrücken

Verfasst: Montag 12. August 2019, 11:45
von noisefloor
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

Re: Falsches Ergebnis bei regulären Ausdrücken

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