Probleme mit reg. Audrü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.
Thuught
User
Beiträge: 28
Registriert: Mittwoch 3. Dezember 2008, 12:19

Probleme mit reg. Audrücken

Beitragvon Thuught » Mittwoch 3. Dezember 2008, 19:46

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
Birne94
User
Beiträge: 90
Registriert: Freitag 28. November 2008, 15:18
Kontaktdaten:

Beitragvon Birne94 » Mittwoch 3. Dezember 2008, 19:49

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^^
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Beitragvon derdon » Mittwoch 3. Dezember 2008, 19:58

Du meinst ^. Innerhalb von eckigen Klammern steht es aber für die Negierung (Umkehrung). $ steht für das Zeilen- bzw. Stringende.
Birne94
User
Beiträge: 90
Registriert: Freitag 28. November 2008, 15:18
Kontaktdaten:

Beitragvon Birne94 » Mittwoch 3. Dezember 2008, 20:11

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^^
Thuught
User
Beiträge: 28
Registriert: Mittwoch 3. Dezember 2008, 12:19

Beitragvon Thuught » Mittwoch 3. Dezember 2008, 20:19

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.
Zuletzt geändert von Thuught am Mittwoch 3. Dezember 2008, 20:31, insgesamt 3-mal geändert.
Birne94
User
Beiträge: 90
Registriert: Freitag 28. November 2008, 15:18
Kontaktdaten:

Beitragvon Birne94 » Mittwoch 3. Dezember 2008, 20:21

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

Edit: einfacher imo^^:
[code=][\wÄÖäüöß]+?!!einself[/code]
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Beitragvon sma » Mittwoch 3. Dezember 2008, 20:35

`"[\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

Wer ist online?

Mitglieder in diesem Forum: Baidu [Spider], SmombieTV