Seite 1 von 1

reguläre Ausdrücke negieren

Verfasst: Sonntag 7. Januar 2007, 14:01
von star405
Hallo

Ich wollte wissen ob es möglich ist reguläre Ausdrücke zu negieren.
Beispielweise um den Ausdruck (bat|exe) zu negieren. Ich habe so etwas
wie (?!...) gefunden aber dieses besagt, dass es mit ... übereinstimmt falls das nächste
nicht übereinstimmt und hilft mir daher leider nicht weiter. Ich suche auch einen und-Operator wie & in den regulären Ausdrücken bin dort leider bis jezt auch noch nicht fündig geworden.

Gruß
star405

Verfasst: Sonntag 7. Januar 2007, 15:51
von Luzandro
Kannst du ein konkretes Beispiel geben, was du matchen willst?

Verfasst: Sonntag 7. Januar 2007, 16:07
von star405
Ich möchte für einen beliebigen booleschen Ausdruck überprüfen können, ob er auf ein bestimmtes Dokument zutrifft z.B. will ich alle Dokumente finden können die weder das Wort Hund noch das Wort Katze enthalten.

Gruß
star405

Verfasst: Sonntag 7. Januar 2007, 16:19
von BlackJack
Das lässt sich nicht vernünftig mit regulären Ausdrücken ausdrücken. Das ginge aber auch komplett ohne:

Code: Alles auswählen

if not ('Hund' in document or 'Katze' in document):
   # ...

Verfasst: Sonntag 7. Januar 2007, 16:27
von Luzandro
Das lässt sich grundsätzlich schon auch mit regulären Ausdrücken machen, aber ich interpretiere jetzt deinen ersten Post so, dass du überprüfen willst, ob bspw Hund UND Katze in einem Text vorkommen und das wird dann problematisch (du suchst ja hier auch nicht wirklich nach einem Muster)

Code: Alles auswählen

pattern = re.compile('Hund|Katze', re.IGNORECASE)
document = "du hund!"
if pattern.search(document) is None:
    #...

Verfasst: Sonntag 7. Januar 2007, 16:40
von star405
Vielen Dank für die Antwort ! Sie hat mir weitergeholfen.
Gruß
star405

Verfasst: Montag 8. Januar 2007, 15:37
von Y0Gi
Für Listen einzelner Zeichen gibt es [^abc] (der Zirkumflex negiert), weiterhin auch z.B. dieses (siehe Dokumentation des Moduls `re`):
(?!...)
Matches if ... doesn't match next. This is a negative lookahead assertion. For example, Isaac (?!Asimov) will match 'Isaac ' only if it's not followed by 'Asimov'.