Seite 1 von 1
Probleme mit reg. Audrücken
Verfasst: Mittwoch 3. Dezember 2008, 19:46
von Thuught
Hallo Python Forum.
Ich habe gerade Probleme mit reg. Ausdrücken.
Soweit ich das verstanden habe, dient "\w" als wildcard für alles, solang es
ein Buchstabe/Zahl ist. Der Compiler lässt aber an dieser Stelle
Aneinanderreihungen der erlaubten zeichen zu. Würd ich das wollen,
könnte ich nen "*" benutzen. Wär toll, wenn Ihr mir erklärt, wo mein Fehler
liegt.
hier mal nen Beispielcode meines Problems:
Code: Alles auswählen
def test(x):
h=re.compile("[\w]{3}blabla")
p=h.search(x)
if p==None:print "no"
else:print "yes"
>>> test("1blabla")
no
>>> test("123blabla")
yes
>>> test("12345678blabla")
yes
Verfasst: Mittwoch 3. Dezember 2008, 19:49
von Birne94
willst du es so haben, dass es nur am anfang des strings gewertet wird?
Code: Alles auswählen
def test(x):
h=re.compile("^[\w]{3}blabla")
p=h.search(x)
if p==None:print "no"
else:print "yes"
>>> test("1blabla")
no
>>> test("123blabla")
yes
>>> test("12345678blabla")
no
imo. statt dem ^ könnte es au ein $ sein. bin nicht sicha^^
Verfasst: Mittwoch 3. Dezember 2008, 19:58
von derdon
Du meinst ^. Innerhalb von eckigen Klammern steht es aber für die Negierung (Umkehrung). $ steht für das Zeilen- bzw. Stringende.
Verfasst: Mittwoch 3. Dezember 2008, 20:11
von Birne94
derdon hat geschrieben:Du meinst ^. Innerhalb von eckigen Klammern steht es aber für die Negierung (Umkehrung). $ steht für das Zeilen- bzw. Stringende.
In diesem Fall steht es aber au0erhalb und signalisiert den String-Anfang^^
Verfasst: Mittwoch 3. Dezember 2008, 20:19
von Thuught
Hui, das ging aber schnell
mir geht es leider nicht um den Teil vorne, sondern dem am Ende des Wortes.
Was mach ich nun, wenn ich nun z.B. alle Wörter haben will, die mit"(!)*(1)*(\w)*(einself)?" enden?
z.b. hier "heute aß ich Döner!11qwert und die Soße war echt scharf!!einself"
edit: beispiel sinnvoller gestaltet...
Ich will mich jetzt nicht darauf festnageln,
mir gehts lediglich darum, dass er mir bei einem Quantor am Ende nicht den ganzen restlichen Text ausspuckt.
Verfasst: Mittwoch 3. Dezember 2008, 20:21
von Birne94
so. jetzt passts
Edit: einfacher imo^^:
Verfasst: Mittwoch 3. Dezember 2008, 20:35
von sma
`"[\w]{3}"` entspricht `"[w]{3}"`, was nur "www" matchet. Du willst `"[\\w]{3}"` oder `r"[\w]{3}"` benutzen, damit der \ auch macht, was du glaubst, dass er macht. Das \w in geschweifte Klammern einzuschließen ist übrigens unnötig. Ich würde ja einfach `\w\w\w` benutzen, was 6 Zeichen und damit 1 weniger als bei der Variante mit {} sind.
Stefan