Seite 1 von 1

Labels einer re

Verfasst: Freitag 6. Januar 2012, 16:44
von Josef
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

Re: Labels einer re

Verfasst: Freitag 6. Januar 2012, 17:06
von 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.

Re: Labels einer re

Verfasst: Freitag 6. Januar 2012, 17:09
von 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.

Re: Labels einer re

Verfasst: Freitag 6. Januar 2012, 17:32
von Hyperion
Ich gebe auch noch mal den Hinweis auf das `datetime`-Modul und `strptime`. Evtl. ist das ja eine Alternative für Dich.