Seite 1 von 1

Problem mit regulären Ausdrücken

Verfasst: Mittwoch 25. Juli 2012, 13:57
von amigo
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

Re: Problem mit regulären Ausdrücken

Verfasst: Mittwoch 25. Juli 2012, 13:58
von EyDu
Sind die Kommas wirlich im zu untersuchenden String vorhanden?

Re: Problem mit regulären Ausdrücken

Verfasst: Mittwoch 25. Juli 2012, 14:16
von /me
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.

Re: Problem mit regulären Ausdrücken

Verfasst: Mittwoch 25. Juli 2012, 14:52
von amigo
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.

Re: Problem mit regulären Ausdrücken

Verfasst: Mittwoch 25. Juli 2012, 17:59
von sma
[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