Midi_Mick
Некоторое время назад у меня была похожая проблема, когда несколько дат с несколькими структурами могли быть в любом месте документа. Следующий код получил их все:
(Примечание: Я нахожусь в Австралии, поэтому короткий формат даты-dd/MM/yy).
string test;
Regex re = new Regex(@"\b(?<datetime>" +
// Date part
@"((" +
@"(\d{1,2}[\/\-\.]\d{1,2}[\/\-\.]\d{2}(\d{2})?)" +
@"|(\d{1,2}\s+(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-zA-Z]*,?\s+\d{2}\d{2}?)" +
@"|((Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-zA-Z]*\s+\d{1,2},?\s+\d{2}\d{2}?)" +
@"|(\d{4}\-\d{1,2}-\d{1,2})" +
@")" +
// Optional time part
@"(" +
@"[T\s]?\d{1,2}:\d{1,2}(:\d{1,2}(\.\d+)?)?(([AP]M)|([\+\-][12]?\d:\d{1,2})|Z)?" +
@")?)" +
// Stand alone time
@"|(\d{1,2}:\d{1,2}(:\d{1,2}(\.\d+)?)?(([AP]M)|([\+\-][12]?\d:\d{1,2})|Z)?)" +
@")\b", RegexOptions.IgnoreCase);
test = " 29/11/15 xxx 29 November 2015 6:27PM xxx 2015-11-29T18:27:45.50+10:00 xxx 2015-11-29 18:27:45.50Z xxx NOV 29, 2015 xxxx 21:15";
MatchCollection matches = re.Matches(test);
foreach (Match m in matches) {
DateTime dt;
if (DateTime.TryParse(m.Groups["datetime"].Value, out dt)
Console.WriteLine("{0}\t\t{1}", m.Groups["datetime"].Value, dt);
}