reguläre Ausdrücke negieren

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.
Antworten
star405
User
Beiträge: 6
Registriert: Sonntag 7. Januar 2007, 13:40

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
Benutzeravatar
Luzandro
User
Beiträge: 87
Registriert: Freitag 21. April 2006, 17:03

Kannst du ein konkretes Beispiel geben, was du matchen willst?
[url=http://www.leckse.net/artikel/meta/profilieren]Profilieren im Netz leicht gemacht[/url]
star405
User
Beiträge: 6
Registriert: Sonntag 7. Januar 2007, 13:40

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
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):
   # ...
Benutzeravatar
Luzandro
User
Beiträge: 87
Registriert: Freitag 21. April 2006, 17:03

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:
    #...
[url=http://www.leckse.net/artikel/meta/profilieren]Profilieren im Netz leicht gemacht[/url]
star405
User
Beiträge: 6
Registriert: Sonntag 7. Januar 2007, 13:40

Vielen Dank für die Antwort ! Sie hat mir weitergeholfen.
Gruß
star405
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

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'.
Antworten