Labels einer re

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
Josef
User
Beiträge: 3
Registriert: Freitag 6. Januar 2012, 16:21

Hallo zusammen,
ich bin neu bei Python, so hoffe ich, dass meine Fragen nicht so dümmlich sind, wie ich mich fühle ;).
Ich arbeite an eine regular expression, die die unterschiedlichen Datumformate nehmen soll. Ich habe 3 verschiedenen Formate:
JJJJ-MM-TT
TT.MM.JJJJ
MM/TT/JJJJ
Ich habe so das geschrieben:

REGEX_DATE_1 =re.compile(r"""
(?P<year1>\d\d\d\d)-(?P<month1>\d?\d)-(?P<day1>\d?\d)|
(?P<day1>\d?\d).(?P<month1>\d?\d).(?P<year1>\d\d\d\d)|
(?P<month1>\d?\d)/(?P<day1>\d?\d)/(?P<year1>\d\d\d\d)\s*$""", re.UNICODE | re.X )

aber der Compiler zeigt der Error:
Error: redefinition of group name 'day1' as group 4; was group 3
Wo liegt den Fehler und gibt es andere art das zu machen Ohne 9 unterschiedlichen groups zu definieren (year1a, year1b,...usw).

Danke im Voraus

Josef
BlackJack

@Josef: Der Fehler liegt darin, dass es jeden Gruppennamen nur einmal geben darf. Womit im Grunde auch der zweite Teil der Frage beantwortet ist.
deets

@Josef

BlackJack hat es ja schon verraten. Die Frage ist, wie du weitermachst. Ich persoenlich halte es fuer angezeigt, 3 Ausdruecke zu definieren, welche alle dieselben Gruppen-Namen definiern

Dann iterierst du darueber, und matcht jeden einzelnen. Wenn's einen Treffer gibt, ist das der Gewinner, und der Rest des Codes kann mit einem Match-Objekt mit bekannten Gruppennamen arbeiten.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ich gebe auch noch mal den Hinweis auf das `datetime`-Modul und `strptime`. Evtl. ist das ja eine Alternative für Dich.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten