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 :D
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

Code: Alles auswählen

[a-zA-ZÄÜÖäüöß]+?!!einself
so. jetzt passts

Edit: einfacher imo^^:

Code: Alles auswählen

[\wÄÖäüöß]+?!!einself

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