Il utilise une expression régulière légèrement modifié et ajoute les différences entre les dates que vous avez mentionné:
string[] input = { "4:19 PM 5:15 PM this is some text blah blah",
"3:00 PM 5:00 PM text"
};
// build up pattern
string datePattern = @"(\d+:\d+\s(?:AM|PM))";
string pattern = String.Format("^{0}{1}{2}{3}$",
datePattern, @"\s+", datePattern, @"\s+.*");
TimeSpan total = new TimeSpan();
foreach (string text in input)
{
var match = Regex.Match(text, pattern);
if (match.Success)
{
// skip first group which has entire match
DateTime dt1 = DateTime.Parse(match.Groups[1].Value);
DateTime dt2 = DateTime.Parse(match.Groups[2].Value);
TimeSpan diff = dt2 - dt1;
total += diff;
}
}
Console.WriteLine("Total difference: {0}", total);
Résultat: Différence: 02:56:00
Si vous êtes confiant que vos données sont dans le format correct, vous pouvez faire l'expression régulière très simple comme suit:
string text = "4:19 PM 5:15 PM this is some text blah blah";
string pattern = @"(?<time>\d+:\d+)\s(?<period>AM|PM)";
foreach(Match m in Regex.Matches(text, pattern))
{
Console.WriteLine("Time: {0} - Period: {1}",
m.Groups["time"].Value,
m.Groups["period"].Value
);
}
Si vous ne faites pas confiance aux données, vous aurez probablement besoin de quelque chose de plus robuste.
Pourquoi les downvotes? –
@homestead: assurez-vous d'avoir la dernière édition. Il me manquait un élément dans la partie d'accumulation de motif et je vous ai vu marqué comme la réponse avant que j'aie fini d'éditer. –