Obtenir la date de Ssortingng

Disons que j’ai l’une des chaînes suivantes:

"Hello, I'm a Ssortingng... This is a Stackoverflowquestion!! Here is a Date: 16.03.2013, 02:35 and yeah, plain text blah blah..-." "This the other ssortingng! :) 22.11.2012. Its a Date you see" "Here we have 2 Dates, 23.12.2012 and 14.07.2011" 

Quel serait le meilleur moyen et le plus rapide d’obtenir ces dates à partir de la chaîne (dans DateTime )?

(Seulement la première apparition dans la chaîne)

Retours souhaitables:

 Ssortingng 1: 16.03.2013 (as a DateTime) Ssortingng 2: 22.11.2012 (" ") Ssortingng 3: 23.12.2012 (" ") 

J’appellerais donc une méthode quelque chose comme:

 DateTime date1 = GetFirstDateFromSsortingng(ssortingng1); 

Ceci extraira, parsingra et imprimera toutes les dates dans le texte saisi:

 var regex = new Regex(@"\b\d{2}\.\d{2}.\d{4}\b"); foreach(Match m in regex.Matches(inputText)) { DateTime dt; if (DateTime.TryParseExact(m.Value, "dd.MM.yyyy", null, DateTimeStyles.None, out dt)) Console.WriteLine(dt.ToSsortingng()); } 

Maintenant, si vous voulez juste la première date, vous pouvez le faire:

 static DateTime? GetFirstDateFromSsortingng(ssortingng inputText) { var regex = new Regex(@"\b\d{2}\.\d{2}.\d{4}\b"); foreach(Match m in regex.Matches(inputText)) { DateTime dt; if (DateTime.TryParseExact(m.Value, "dd.MM.yyyy", null, DateTimeStyles.None, out dt)) return dt; } return null; } 

Notez que la méthode renvoie un DateTime nullable, de sorte qu’elle puisse renvoyer null lorsque la chaîne ne contient aucune date.

Si vos dates sont toujours dans ce format, vous pouvez utiliser une expression rationnelle pour saisir la chaîne de date, puis utiliser DateTime.ParseExact pour obtenir le résultat souhaité:

 public DateTime? GetFirstDateFromSsortingng(ssortingng input) { DateTime d; // Exclude ssortingngs with no matching subssortingng foreach (Match m in Regex.Matches(input, @"[0-9]{2}\.[0-9]{2}\.[0-9]{4}")) { // Exclude matching subssortingngs which aren't valid DateTimes if (DateTime.TryParseExact(match.Value, "dd.MM.yyyy", null, DateTimeStyles.None, out d)) { return d; } } return null; } 

Essaye ça:

 using System; using System.Text.RegularExpressions; public class Example { public static DateTime? GetFirstDateFromSsortingng(ssortingng input); { ssortingng pattern = @"\d{2}\.\d{2}\.\d{4}"; Match m = Regex.Match(input, pattern); DateTime result; foreach(ssortingng value in match.Groups) if (DateTime.TryParseExact(match.Groups[1], "dd.MM.yyyy", CultureInfo.CurrentCulture, DateTimeStyles.None, out result) return result; return null; } } 

Créez une méthode dont les parameters sont une expression régulière pour capturer le format de date et la chaîne à partir de laquelle vous allez extraire la date. Je crois que si vous n’avez pas un format qui sera utilisé, il ne sera pas possible d’extraire la date d’une série de caractères alphanumériques dans une chaîne.