2010-05-08 6 views
4

Quel devrait être le regex pour la date de tout format commeRegex pour la date

26FEB2009 
30 Jul 2009 
27 Mar 2008 
29/05/2008 
27 Aug 2009 

Quelle devrait être l'expression régulière pour cela?

Je regex qui correspond à 26-Feb-2009 et 26 février 2009 avec, mais pas avec 26FEB2009. Donc, si quelqu'un sait alors s'il vous plaît le mettre à jour.

(?:^|[^\d\w:])(?'day'\d{1,2})(?:-?st\s+|-?th\s+|-?rd\s+|-?nd\s+|-|\s+)(?'month'Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[uarychilestmbro]*(?:\s*,?\s*|-)(?:'?(?'year'\d{2})|(?'year'\d{4}))(?=$|[^\d\w]) 

La date 26FEB2009 est autre sous-chaîne de chaîne comme FUTIDX 26FEB2009 NIFTY 0 et analysable de la page html, donc je ne peux pas définir les espaces blancs ou delimiter.

EDIT Exemples:

07.11.2008 
Jan 11 2008 
May 26 2008 
26FEB2009 
27 Mar 2008 

Répondre

1

Si cela correspond à 26 février 2009 et non 26FEB2009, sonne comme vous avez besoin de faire le caractère des espaces et delimiter ("-" et "/") entre chaque date segment facultatif. Le caractère + meta spécifie un ou plusieurs caractères, pensez à utiliser * (zéro ou plus) pour les espaces.

EDIT

Ce que je voulais dire, si votre expression régulière est correspondant à des dates avec le caractère des espaces/delimiter, mais ne correspond pas à la date sans l'un d'eux à savoir 26FEB2009, il semble que vous précisant que l'espace/délimiteur est obligatoire pour un match.

est ici quelque chose que je frappais rapidement ensemble:

(\d{1,2})(\/|-|\s*)?((Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)|\d{2})(\/|-|\s*)?(\d{4}) 

Vous pouvez vérifier que cela ne manque certaines fonctionnalités que vous voulez, mais il correspond à tous vos exemples.

+0

@ Moonshield, la date ** 26FEB2009 ** est sous-chaîne d'une autre chaîne comme ** FUTIDX 26FEB2009 NIFTY 0 ** et analysé à partir de la page html, donc je ne peux pas définir l'espace ou le délimiteur. – Harikrishna

+0

@Moonshield: Parce que ses mois peuvent être 'Feb' ou' FEB', je listerais les mois dans la regex en minuscules. La chaîne testée peut alors être '.ToLower()'. – IAbstract

+0

@ dboarman-FissureStudios: Bon point, le widget j'ai testé l'expression régulière avec "insensible à la casse" activé. – Moonshield

4

Je vous déconseille d'utiliser regex pour l'analyse des dates et même fortement contre l'utilisation de regex pour l'analyse HTML. Pour l'analyse syntaxique dates que vous pouvez jeter un oeil à la méthode TryParseExact et pour l'analyse syntaxique HTML d'un analyseur DOM tels que Html Agility Pack:

var dateStr = "26FEB2009"; 
var formats = new[] 
{ 
    "ddMMMyyyy", "dd MMM yyyy", "dd/MM/yyyy" 
}; 
DateTime date; 
if (DateTime.TryParseExact(
    dateStr, 
    formats, 
    CultureInfo.InvariantCulture, 
    DateTimeStyles.NoCurrentDateDefault, 
    out date)) 
{ 
    // You have a match, use the date object 
} 
+0

@Darin Dimitrov, Est-ce une méthode intégrée dans .net? – Harikrishna

+0

Oui, je l'ai lié à MSDN. –

+0

@Darin Dimitrov, Ok..then, nous devons simplement définir le format différent dans le paramètre et toute la date que nous définissons dans le pour le paramètre de format sera apparié? Est-ce dll open-source? D'où puis-je le télécharger? – Harikrishna