RegEx und Assertionen
Verfasst: Montag 3. Dezember 2007, 12:42
Hallo,
ein Statement vorweg: Ich bin blutiger Anfänger bezüglich Python und programmieren im allgemeinen. Ebenfalls beim RegExen (heute erster Kontakt...).
Wer sich durch "Newbie"-Fragen gestört fühlt, sollte diesen Thread einfach ignorieren.
Jetzt zum Thema: Um Python kennen zu lernen, habe ich mich an die Pythonchallenge gewagt. In Level 3 geht es um Reguläre Ausdrücke. Mittlerweile habe ich das Rätsel gelöst, ich dachte es wären "schärfere" Bedingungen... Bei meinem ersten Ansatz (mit zu scharfen Bedingungen...) ist mir ein Problem untergekommen, welches ich nicht ganz verstehe...
Angenommen wir haben diesen string:
und ich möchte mit einen RegEx alle Kleinbuchstaben finden, die von genau(!) 3 gleichen(!) Großbuchstaben flankiert sind, war meine Herangehensweise:
Damit erreiche ich aber nur, dass mir bei obigem Beispiel-String zwar die Stelle sCCCaCCCs gefunden wird, aber ich schaffe es nicht, durch eine Lookbehind-Assertion den "sCCC" Teil "weg" zu schaffen. Den CCCs-Schwanz schneide ich mit der (?=)-Assertion heraus. Wenn ich aber Versuche, die Lookbehind-Assertion am Anfang einzubauen: gibt es keine Matches mehr.
Liegt das fehlverhalten evt. daran, dass ich die Assertion über einen Ausdruck vornehme, der Zugriff auf eigene Subsegmente ( \2 ) enthält?
Falls ja, wie kann ich dieses Verhalten umgehen?
Über Hinweise würde ich mich sehr freuen,
viele Grüße!
ein Statement vorweg: Ich bin blutiger Anfänger bezüglich Python und programmieren im allgemeinen. Ebenfalls beim RegExen (heute erster Kontakt...).
Wer sich durch "Newbie"-Fragen gestört fühlt, sollte diesen Thread einfach ignorieren.
Jetzt zum Thema: Um Python kennen zu lernen, habe ich mich an die Pythonchallenge gewagt. In Level 3 geht es um Reguläre Ausdrücke. Mittlerweile habe ich das Rätsel gelöst, ich dachte es wären "schärfere" Bedingungen... Bei meinem ersten Ansatz (mit zu scharfen Bedingungen...) ist mir ein Problem untergekommen, welches ich nicht ganz verstehe...
Angenommen wir haben diesen string:
Code: Alles auswählen
teststring = 'jhskjfhAAAAbBBBBjkhsCCCaCCCsDDDsD'
Code: Alles auswählen
re.compile('[^\2](([A-Z])\2{2})[a-z](?=\1[^\2])')
Code: Alles auswählen
re.compile('(?<=[^\2](([A-Z])\2{2}))[a-z](?=\1[^\2])')
Liegt das fehlverhalten evt. daran, dass ich die Assertion über einen Ausdruck vornehme, der Zugriff auf eigene Subsegmente ( \2 ) enthält?
Falls ja, wie kann ich dieses Verhalten umgehen?
Über Hinweise würde ich mich sehr freuen,
viele Grüße!