Problem mit regulären Ausdrücken

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
amigo
User
Beiträge: 10
Registriert: Donnerstag 12. Januar 2012, 16:16

Hi,
ich schreibe grade ein Programm, das aus einem riesigen String mit wirren Buchstabenketten, Teile raussuchen soll, bei denen ein kleiner Buchstabe genau zwischen 3 Großbuchstaben auf jeder Seite (rechts und links) steht.
Die regex sah so aus:

Code: Alles auswählen

pattern= re.compile("[A-Z],[A-Z],[A-Z],[a-z],[A-Z],[A-Z],[A-Z]")
Aber er findet iwie nichts.
Ich mache das für diese Pythonchallenge http://www.pythonchallenge.com. Ich möchte nich einfach die Lösung ergammeln, aber ich komm einfach nicht auf die Lösung.
Danke im Vorraus
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Sind die Kommas wirlich im zu untersuchenden String vorhanden?
Das Leben ist wie ein Tennisball.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Hier noch eine Ergänzung zur Frage von EyDu:

Code: Alles auswählen

>>> pattern = re.compile("[A-Z],[A-Z],[A-Z],[a-z],[A-Z],[A-Z],[A-Z]")
>>> result = pattern.search('AB,C,D,e,F,G,H,I')
>>> print result.group(0)
B,C,D,e,F,G,H
Offensichtlich matcht der Ausdruck - allerdings nicht genau das was du möchtest. Korrigiere das und dann könntest du auch noch {3} einsetzen um den Ausdruck zu verkürzen.

Edit: Jetzt erinnere ich mich an die Aufgabe. Da sind dann noch mehr Anpassungen nötig. Es geht um exakt drei Großbuchstaben auf jeder Seite.
amigo
User
Beiträge: 10
Registriert: Donnerstag 12. Januar 2012, 16:16

oh, die Kommas waren aus Versehen. Ich kapiers net wenn ich nur [A-Z] eingebe sollten doch eig. alle vorhanden Großbuchstaben kommen, aber es kommt nur CBAE.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

[A-Z] ist schon der richtige Weg, um einen Großbuchstaben (natürlich ohne Umlaute usw.) zu finden. Etwas kürzer (und ohne ",") wäre dieser Ausdruck: [A-Z]{3}[a-z][A-Z]{3}. Will man auch Unicode korrekt unterstützen, wäre es \p{Lu} und \p{Ll}, doch ich weiß gerade nicht, ob Python das überhaupt unterstützt.

Stefan
Antworten