2016-07-24 20 views
-5

Ich versuche, einen regulären Ausdruck zu finden, die Daten in folgendem Format übereinstimmen: 3-Jul-16 oder 30-Jun-16Regex für dieses Datumsformat?

ich diese Regex zunächst versucht haben:

/[0-9]{1,}-[a-zA-Z]{3}-[0-9]{1,}/g 

Aber es passt auch Daten wie 947-UfO-104, und das ist nicht etwas, was ich will.
Zuerst habe ich den Monat:

/[0-9]{1,}-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-[0-9]{1,}/g 

Nun wird das Jahr in Ordnung ist, weil es etwas numerisch sein könnte.
Für den Tag Teil habe ich versucht:

/([1-9]|1[0-9]|2[0-9]|30|31)-(Jan|Feb.../g 

Nun, mein Problem, dass so etwas, wenn gegeben ist: 73-Jul-2015
Sie paßt: 3-Jul-2015

ich habe versucht, sicherzustellen, dass das Datum von einem nicht-stelligen char so folgt:

/[^0-9]{1,}([1-9]|1[0-9]|2[0-9]|30|31)-(Jan|Feb.../g 

Aber dann, wenn die Datum ist am Anfang der Zeichenfolge, es hat es nicht abgefangen (weil es nicht gefolgt wird keine char).

Also meine Frage ist, gibt es eine Regex-Teil, der "Ein nicht-numerisches Zeichen oder leere Zeichenfolge"?

+6

* "Im irgendwie neu mit regex, aber ich will mehr lernen" * - toll! * "Also brauche ich eine Regex-Suche" * - nein. Beginnen Sie mit z.B. https://docs.python.org/3/howto/regex.html – jonrsharpe

Antwort

1

Teilen Sie die Aufgabe in 3 Teile auf. Zuerst eine Zahl im Bereich von 1-31 (tutorial), dann eine Liste möglicher Werte für den Monat und dann zwei Zahlen.

\b([1-9]|[12][0-9]|3[01])-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d{2})\b 

Regex101 Demo

+0

Das funktioniert, danke! – Rommel

+0

@Rommel Ich hoffe, dass Sie aus diesem Beispiel mehr über Regex gelernt haben. Es ist nicht in Ordnung, eine Antwort zu nehmen, ohne zu lernen, wie man es selbst macht. – 4castle

+0

@ 4castle wenn gefüttert mit '35-Jul-12' fängt es' 5-Jul-12', bitte beachten Sie! –