2017-02-17 5 views
0

Ich passe mehrere Formate von Daten mit dieser regex.Wie verbessert man den folgenden Python-Datumsregex?

(?i)\b\d{1,2}[-|–|—|\s|(?:\sde\s|\sdel\s)|\d+/](?:Ene|Enero|Feb|Febrero|Mar|Marzo|Abril|Mayo|May|Jun|Junio|Jul|Julio|Ago|Agosto|Sep|Sept|Septiembre|Oct|Octubre|Nov|Noviembre|Dic|Diciembre|\d+)[-|–|—|\s|(?:\sde\s|\sdel\s)|\d+/](?:\d{4}|\d{2})\b

Allerdings habe ich nicht herausfinden, wie die vorherige regex Unterstützung für passende Formate wie diese hinzufügen:

11 de Noviembre de 2013 

23 de noviembre del 2011 

11 de Noviembre del 2013 

Wie Sie in dem obigen regex sehen können, habe ich versucht, zu verwenden, \w(\sde\s|\sdel\s) und (?:\sde\s|\sdel\s). Trotzdem funktioniert es nicht. Wie kann ich die früheren Datumsfälle abgleichen?

+0

Warum downvote? .... Ich habe ein Beispiel und alternative Ansätze zur Lösung dieses Problems? ... überprüfen Sie die Regex-Tester ... –

+0

https://regex101.com/r/uvdYVz/5 Fixed it. Sie haben Sets statt Capture-Gruppen für Ihre de/del passende – TemporalWolf

+0

verwendet. Es ist sehr ähnlich zu dem, was ich versuchte .... warum mein Versuch nicht funktioniert hat? @TemporalWolf –

Antwort

5
[-|–|—|\s|(?:\sde\s|\sdel\s)|\d+/] 

[-|–|—|\s|(?:\sde\s|\sdel\s)|\d+/] 

für character classes [] fragen, wann, was wollen Sie ist groups () (oder nicht-einfangenden Gruppen in diesem Fall) (?:):

(?:-|–|—|\s|(?:\sde\s|\sdel\s)|\d+/) 

(?:-|–|—|\s|(?:\sde\s|\sdel\s)|\d+/) 

die regex101

Zusätzlich sehen, wenn Sie schauen, für einen Grund:

What's the difference between() and [] in regular expression patterns?

+2

Danke ... Ich dachte '()' und '[]' waren die gleichen –

+2

@ J.Do Nope. Sie sollten die Erklärung bei regex101 gelesen haben. –

+0

Ok, jetzt habe ich es, danke –

0

Da es sich um eine Python Frage, warum Sie die de ‚s und del‘ s wie und wann sie unter Verwendung

date = date.replace('de','').replace('del','') 

Und dann arbeiten treten nicht entfernen Sie darauf, wie Sie wurden?

+0

Dann sind das keine gültigen Daten in Bezug auf die Sprache –

+0

Natürlich kann ich nur einen Ersatz mit einem Leerzeichen zu tun .... aber ich lerne Regex ... Ich möchte wissen, wie man bestimmte Zeichenfolgen erfassen .. –

+1

_'Dann sind das keine gültigen Daten in Bezug auf die Sprache '- stimme zu, aber sicher können sprachspezifische Konstrukte in den Interna einer Anwendung ignoriert werden. Sie senden nicht das Datum, an dem _de_ und _del_ entfernt wurden, an den Benutzer. Das sagte jedoch, es ist durchaus verständlich, eine regex-basierte Lösung dazu zu wollen. Ich habe nur versucht, den Anwalt des Teufels zu spielen. – Anomitra