eine negative looksahead nach einem quantifizierten Muster mit einem faulen oder gierigen Quantor Platzierung fast ergibt nie erwarteten Ergebnisse wegen Rückzieher: einmal die .*
Streichhölzer 0+ Zeichen außer Zeilenumbruch verkohlt es überprüft das Look-Ahead-Muster und da es keine work
gleich nach dem Ende der ersten Zeile ist das Ergebnis wahr.
die Regex zu beheben, Sie sicher .
Streichhölzer Zeilenumbruch Zeichen machen müssen (re.DOTALL
Modifikator passieren oder (?s)
am Anfang hinzufügen) und .*
zum Look-Ahead bewegen:
re.search(r'project(?!.*work)', s, re.DOTALL)
die regex demo See.
Dieses Muster bedeutet: Find project
und dann die Übereinstimmung fehlschlagen, wenn check
Teilzeichenfolge nach 0+ Zeichen vorhanden ist.
Beachten Sie, dass es sinnvoller ist, if 'project' in s and 'work' not in s
zu verwenden, um nach dem gleichen zu suchen, wenn Sie diese Regex verwenden möchten.
Warum nicht ['if 'Projekt' in s und 'Arbeit' nicht in s '] (https://ideone.com/n3Er0w)? BTW, die Regex ist einfach zu reparieren mit '' (? S) Projekt (?!. * Arbeit) '' –
Aber ich brauche den regulären Ausdruck nur, weil mein Code viele reguläre Ausdrücke hat und es gibt eine Funktion, die die angegebene suchen wird Argument (re) und Rückgabe wahr/falsch in Abhängigkeit von der Anwesenheit. –
Diese Frage muss überarbeitet werden. Der Beispielaufruf zu sea [r] ch ist entweder falsch, weil es ein kompiliertes re ist und doch eine Zeichenfolge übergeben wird, die wie ein RE aussieht, wenn es "stechen" sollte oder es ein Aufruf auf Modulebene ist und daher den Zu suchende Zeichenfolge, die als zweiter Parameter übergeben werden soll. – Nick