Вы можете объединить регулярные выражения для получения хороших кандидатов для DateTime
с, а затем TryParseExact
для анализа действительных из них в окончательные DateTime
:
using System.Linq;
using System.Text.RegularExpressions;
...
private static DateTime[] ExtractDates(string value, IFormatProvider provider = null) {
return Regex
.Matches(value, @"\b[0-9]{1,2}\s+[A-Z][a-z]+\s+[0-9]{4}\b")
.Cast<Match>()
.Select(match => (DateTime.TryParseExact(
match.Value,
"d MMM yyyy",
provider,
DateTimeStyles.AssumeLocal,
out DateTime result), result))
.Where(tuple => tuple.Item1)
.Select(tuple => tuple.result)
.ToArray();
}
Например:
DateTime[] result = ExtractDates(
"(from 01 Jan 2019 up and including to 03 Jun 2020)",
CultureInfo.InvariantCulture);
// 3 June 2020
DateTime secondPart = result[1];