Das Muster (?<!(asp|php|jsp))\?.*
funktioniert in PCRE, aber es funktioniert nicht in Python.Python Regex Negative Lookbehind
Was kann ich tun, damit diese Regex in Python funktioniert? (Python 2.7)
Das Muster (?<!(asp|php|jsp))\?.*
funktioniert in PCRE, aber es funktioniert nicht in Python.Python Regex Negative Lookbehind
Was kann ich tun, damit diese Regex in Python funktioniert? (Python 2.7)
Es funktioniert vollkommen in Ordnung für mich. Benutzt du es vielleicht falsch? Stellen Sie sicher, re.search
statt re.match
zu verwenden:
>>> import re
>>> s = 'somestring.asp?1=123'
>>> re.search(r"(?<!(asp|php|jsp))\?.*", s)
>>> s = 'somestring.xml?1=123'
>>> re.search(r"(?<!(asp|php|jsp))\?.*", s)
<_sre.SRE_Match object at 0x0000000002DCB098>
Welches ist genau, wie Ihr Muster verhalten soll. Wie glglgl erwähnt, können Sie die Übereinstimmung erhalten, wenn Sie das Objekt Match
einer Variablen zuweisen (zB m
) und dann m.group()
aufrufen. Das ergibt ?1=123
.
Übrigens können Sie die inneren Klammern weglassen. Dieses Muster ist gleichwertig:
(?<!asp|php|jsp)\?.*
... und 're.search (r" (? glglgl
Wie funktioniert es nicht? Gibt es einen Fehler? Wenn ja, poste den Fehler. Passt es nicht zu dem, was Sie erwarten? Wenn ja, poste den Code, wo du ihn verwendest, und zeige die Ausgabe, die du bekommst, im Gegensatz zu dem, was du erwartest. – BrenBarn
Hier ist die [doc] (http://docs.python.org/2/library/re.html) für das re-Modul, klar die Unterstützung von negativen Lookbehind Assertions. –
Negative Lookbehinds funktionieren solange, bis alle Alternativen gleich lang sind. Also funktioniert das '(? georg