Seite 1 von 1

re (Reguläre Ausdrücke) : Komplement?

Verfasst: Mittwoch 20. Juli 2005, 13:08
von Headwire
[EDIT: ups falsches subforum .... sorry]

hi zusammen!

kann mir jemand sagen, wie man in python einen regulären ausdruck schreibt, der das komplement von einem anderen darstellt?

bsp.: ich will einen ausdruck der auf alles matcht was nicht auf "abc" matcht

quasi so eine art [^(?:abc)]

also:

input "abc" --> matcht nicht
input "dabc" --> matcht nicht
input "def" --> matcht
usw.

danke im voraus

p.s.: ich weiß, dass man z.b. mit

Code: Alles auswählen

if re.search("abc",string)==None: 
   passt
else:
   passt nicht
arbeiten könnte ... aber genau das darf ich hier nicht. ich brauche genau en komplementären ausdruck. gibt es laut theorie über reguläre sprachen etc. ja für jeden regulren ausdruck.

Edit (Leonidas): Verschoben.

Verfasst: Mittwoch 20. Juli 2005, 16:32
von CM
Hoi,

wie wäre es Du traust einfach Deiner eigenen Antwort?

Code: Alles auswählen

anti_regex = re.compile('[^abc])
Daraus lassen sich dann natürlich auch komplexere reguläre Ausdrücke ableiten.

Gruß,
Christian

Verfasst: Mittwoch 20. Juli 2005, 16:44
von Headwire
ääähm .... nei. [^abc] steht für jedes EINZELNE zeichen, ausser a, b oder c .... also die zeichen d-z, A-Z, 0-9, \n, \s etc. ..... aber ich will ha nicht nur ein einzelnes zeichen "negieren", sondern eine gruppe von zeichen, bzw einen längeren string.

[^(?:abc)] geht aber leider nicht.

Re: re (Reguläre Ausdrücke) : Komplement?

Verfasst: Mittwoch 20. Juli 2005, 21:39
von BlackJack
Headwire hat geschrieben:p.s.: ich weiß, dass man z.b. mit

Code: Alles auswählen

if re.search("abc",string)==None: 
   passt
else:
   passt nicht
arbeiten könnte ... aber genau das darf ich hier nicht.
Was heisst, das darfst Du nicht? Hausaufgabe?
ich brauche genau en komplementären ausdruck. gibt es laut theorie über reguläre sprachen etc. ja für jeden regulren ausdruck
Vorsicht: `regular expressions` in Python, Perl usw. sind keine regulären Sprachen im theoretischen Sinn. Das heisst mit der Komplementbildung bei den theoretischen regulären Sprachen bekommst Du nicht für jede `regular expression` das Komplement hin, sondern nur bei solchen, die sich auf die "Features" der theoretischen regulären Sprachen beschränken.

Verfasst: Donnerstag 21. Juli 2005, 22:20
von BlackJack
Ich nochmal. Aus "Theoretische Informatik - kurzgefasst" von Uwe Schöning:
Bemerkung: Da die regulären Ausdrücke gerade die regulären Sprachen beschreiben, muss es zu jedem regulären Ausdruck a einen Ausdruck b geben, der die Komplementsprache darstellt: [...]. Das heisst die Komplementbildung ist mittels Vereinigung, Produkt und Sternoperation darstellbar. Die entsprechende Konstruktion [...] ist jedoch sehr aufwändig, da sie die Stufen regulärer Ausdruck -> NFA -> DFA -> komplementärer DFA -> regulärer Ausdruck durchlaufen müsste.
Na dann viel Spass. :twisted: