
Hallo, ich bin neu hier und hoffe, dass ich zum Einen mit dieser Anfrage keinen Fehler gemacht habe und zum Anderen, dass mir jemand bei meinem Problem helfen kann: Ich möchte in einer Regular Expression das "negative lookbehind" einsetzen - habe es aber auch nach stundenlangem Versuchen nicht hinbekommen. Hier der Auszug aus der Python Help: (?<!...) Matches if the current position in the string is not preceded by a match for .... This is called a negative lookbehind assertion. Similar to positive lookbehind assertions, the contained pattern must only match strings of some fixed length. Patterns which start with negative lookbehind assertions may match at the beginning of the string being searched. Und hier mein Testprogramm: import re line_s = ['#begin-a AND End-a 2', '!begin-b and End-b 3'] regexp = r'begin(!AND)' c_regex = re.compile(regexp) for x in line_s: print '-' * 20, x if c_regex.search(x) != None: print 'found it...' else: print "didn't find it..." Ich erwarte, dass einmal der if- und einmal der else-Zweig durchlaufen wird - die RegularExpression sollte ein 'begin' mit einem grossgeschriebenen 'AND' nicht als Treffer werten... Vielen Dank für die Hilfe im voraus Thomas Staack _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

* Staack, Thomas 3877 RD-IS-E23 (2004-05-28 13:17 +0100)
ich bin neu hier und hoffe, dass ich zum Einen mit dieser Anfrage keinen Fehler gemacht habe [...]
Wie wär's denn 'mal mit einem /Zeilenumbruch/ bei ungefähr siebzig Zeichen? Es ist eine Zumutung, deinen Artikel lesen zu müssen.
if c_regex.search(x):
Lesen solltest du schon können. Für "negative lookbehind" steht in der Hilfe "?<!" und nicht "!" wie in deinem Code. Außerdem steht in dem Beispiel zu "positive lookbehind" ganz klar, daß der "lookbehind" /vor/ dem Match kommt! Außerdem willst du ja nicht "zurück" sehen sondern vorwärts ("ahead"), da das "AND" hinter dem "begin" kommt (vom Stringanfang aus gesehen). Du kannst aber nicht einfach beliebige Zeichen zwischen dem "begin" und dem "AND" einfach ignorieren. Richtig ist also: "regexp = r'begin(?!.*AND)". Allgemein: rücke bitte mit vier Leerzeichen ein (statt einem). Außerdem hat dein Problem nichts mit Python sondern mit Regulären Ausdrücken zu tun; lies... * Regular Expressions http://www.grymoire.com/Unix/Regular.html * Regular Expression HOWTO http://www.amk.ca/python/howto/regex/regex.html http://www.amk.ca/files/howto/regex.pdf * Tutorial: Using regular expressions https://www6.software.ibm.com/developerworks/education/l-regexp/regexp.zip https://www6.software.ibm.com/developerworks/education/l-regexp/regexp.pdf * So What's A $#!%% Regular Expression, Anyway?! http://www.devshed.com/c/a/Administration/So-Whats-A-%24%25%25-Regular-Expre... * Perl Regular Expression Tutorial http://www.english.uga.edu/humcomp/perl/regex2a.html * A Tao of Regular Expressions http://sitescooper.org/tao_regexps.html * Tutorial: Regex-Kurs (Reguläre Ausdrücke in TB) http://www.regenechsen.de/regex_de/regex_1_de.html http://www.regenechsen.de/admin/regulaere_ausdruecke_in_tb.zip * Regular-Expressions.info (Tutorial, Examples and Reference) http://www.regular-expressions.info Thorsten _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Thorsten Kampe wrote:
Außerdem hat dein Problem nichts mit Python sondern mit Regulären Ausdrücken zu tun; lies...
Der OP muss sich ja vieles sagen lassen, aber willst du wirklich die Diskussion des Einsatzes von Modulen aus der Standard-Bibliothek aus dieser Mailing-Liste verbannen? Das sieht mir dann doch nach leicht uebertriebenem Purismus aus... -schorsch -- Georg Mischler -- simulations developer -- schorsch at schorsch com +schorsch.com+ -- lighting design tools -- http://www.schorsch.com/ _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

* Georg Mischler (2004-05-28 14:00 +0100)
TS' Problem "Negative Lookbehind" statt "Negative Lookahead" war - wie du zugeben wirst - nicht Python relevant (und wäre in Perl oder jedem beliebigen Editor, der Reguläre Ausdrücke unterstützt, genau das gleiche gewesen. Selbstverständlich ist man hinterher immer schlauer und TS konnte nicht vorher wissen, ob sein Problem ein Python- oder ein Regex-Problem ist. Offensichtlich hat TS aber Probleme mit Regulären Ausdrücken (und nicht mit Python) und diese Probleme kann er schwerlich hier lösen sondern durch Studium von Tutorials zu Regulären Ausdrücken. Auf gut Deutsch: selbstverständlich kann man Probleme hier einbringen, wenn man sich nicht sicher ist, ob es ein Python oder ein anderes Problem ist. Thorsten _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Staack, Thomas wrote:
[snip]
1. Warum verwendest du "(!...", und nicht "(?<!..." wie oben aus der Python-Help zitiert? 2. Wie wird in deinem Pattern das "-a " (resp. "-b ", etc.) berücksichtigt? -schorsch -- Georg Mischler -- simulations developer -- schorsch at schorsch com +schorsch.com+ -- lighting design tools -- http://www.schorsch.com/ _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

* Staack, Thomas 3877 RD-IS-E23 (2004-05-28 13:17 +0100)
ich bin neu hier und hoffe, dass ich zum Einen mit dieser Anfrage keinen Fehler gemacht habe [...]
Wie wär's denn 'mal mit einem /Zeilenumbruch/ bei ungefähr siebzig Zeichen? Es ist eine Zumutung, deinen Artikel lesen zu müssen.
if c_regex.search(x):
Lesen solltest du schon können. Für "negative lookbehind" steht in der Hilfe "?<!" und nicht "!" wie in deinem Code. Außerdem steht in dem Beispiel zu "positive lookbehind" ganz klar, daß der "lookbehind" /vor/ dem Match kommt! Außerdem willst du ja nicht "zurück" sehen sondern vorwärts ("ahead"), da das "AND" hinter dem "begin" kommt (vom Stringanfang aus gesehen). Du kannst aber nicht einfach beliebige Zeichen zwischen dem "begin" und dem "AND" einfach ignorieren. Richtig ist also: "regexp = r'begin(?!.*AND)". Allgemein: rücke bitte mit vier Leerzeichen ein (statt einem). Außerdem hat dein Problem nichts mit Python sondern mit Regulären Ausdrücken zu tun; lies... * Regular Expressions http://www.grymoire.com/Unix/Regular.html * Regular Expression HOWTO http://www.amk.ca/python/howto/regex/regex.html http://www.amk.ca/files/howto/regex.pdf * Tutorial: Using regular expressions https://www6.software.ibm.com/developerworks/education/l-regexp/regexp.zip https://www6.software.ibm.com/developerworks/education/l-regexp/regexp.pdf * So What's A $#!%% Regular Expression, Anyway?! http://www.devshed.com/c/a/Administration/So-Whats-A-%24%25%25-Regular-Expre... * Perl Regular Expression Tutorial http://www.english.uga.edu/humcomp/perl/regex2a.html * A Tao of Regular Expressions http://sitescooper.org/tao_regexps.html * Tutorial: Regex-Kurs (Reguläre Ausdrücke in TB) http://www.regenechsen.de/regex_de/regex_1_de.html http://www.regenechsen.de/admin/regulaere_ausdruecke_in_tb.zip * Regular-Expressions.info (Tutorial, Examples and Reference) http://www.regular-expressions.info Thorsten _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Thorsten Kampe wrote:
Außerdem hat dein Problem nichts mit Python sondern mit Regulären Ausdrücken zu tun; lies...
Der OP muss sich ja vieles sagen lassen, aber willst du wirklich die Diskussion des Einsatzes von Modulen aus der Standard-Bibliothek aus dieser Mailing-Liste verbannen? Das sieht mir dann doch nach leicht uebertriebenem Purismus aus... -schorsch -- Georg Mischler -- simulations developer -- schorsch at schorsch com +schorsch.com+ -- lighting design tools -- http://www.schorsch.com/ _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

* Georg Mischler (2004-05-28 14:00 +0100)
TS' Problem "Negative Lookbehind" statt "Negative Lookahead" war - wie du zugeben wirst - nicht Python relevant (und wäre in Perl oder jedem beliebigen Editor, der Reguläre Ausdrücke unterstützt, genau das gleiche gewesen. Selbstverständlich ist man hinterher immer schlauer und TS konnte nicht vorher wissen, ob sein Problem ein Python- oder ein Regex-Problem ist. Offensichtlich hat TS aber Probleme mit Regulären Ausdrücken (und nicht mit Python) und diese Probleme kann er schwerlich hier lösen sondern durch Studium von Tutorials zu Regulären Ausdrücken. Auf gut Deutsch: selbstverständlich kann man Probleme hier einbringen, wenn man sich nicht sicher ist, ob es ein Python oder ein anderes Problem ist. Thorsten _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Staack, Thomas wrote:
[snip]
1. Warum verwendest du "(!...", und nicht "(?<!..." wie oben aus der Python-Help zitiert? 2. Wie wird in deinem Pattern das "-a " (resp. "-b ", etc.) berücksichtigt? -schorsch -- Georg Mischler -- simulations developer -- schorsch at schorsch com +schorsch.com+ -- lighting design tools -- http://www.schorsch.com/ _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
participants (3)
-
Georg Mischler
-
Staack, Thomas 3877 RD-IS-E23
-
Thorsten Kampe