2010-12-07 9 views
0

Je regarde une chaîne de caractères pour extraire deux valeurs de date au format mm/jj/aaaa, m/j/aaaa, m/jj/aaaa ou mm/j/aaaa. Comment ajouter cette condition à mon Regex?Comment puis-je vérifier plusieurs formats de date dans Regex?

private static readonly Regex dateRegex = new Regex(@"\d{2}/\d{2}/\d{4}"); 
+0

S'il vous plaît publier un exemple de votre chaîne, où les valeurs sont en – Mariusz

Répondre

6
private static readonly Regex dateRegex = new Regex(@"\d{1,2}/\d{1,2}/\d{4}"); 

Edit: Après avoir obtenu les matchs initiaux, tenter de les analyser à l'aide DateTime.TryParse pour vérifier qu'ils sont effectivement des dates valides. Sinon, votre regex devra être significativement plus complexe (voir la réponse de Jeff l'Ours).

+0

Vous me battez pendant quelques secondes :-) – Toto

0

Utilisez une expression régulière comme celui-ci (option1|option2)

Le | est un OU. En lisant vos exemples, je ne pense pas que vous en ayez besoin. Essayez ceci à la place.

(?<month>[0-9]{1,2})\/(?<day>[0-9]{1,2})\/(?<year>[0-9]{4}) 

Dans la clause {n,m}, n est le nombre minimum qui doit être adapté en m est le nombre maximum.

NOTE: il y a un commentaire sur un post ici quelque part qui parle de l'utilisation [0-9] au lieu de \d depuis \d peut également correspondre à certains caractères unicode.

+0

+1 à moi-même pour expliquer la '{n, m}' expression qui est ce que l'OP nécessaire. – Brad

0

Avec un "OU". En Regex "|":

"(regex1 | regex2)" 

comme:

Regex dateRegex = new Regex(@"(\d{1,2}/\d{1,2}/\d{4}|\d{1,2}\.d{1,2}\.d{1,4})"); 
1

Cela fera le travail:

\d{1,2}\/\d{1,2}\/\d{4} 
Questions connexes