TryParseExact - Поиск даты в середине строки текста

Доброе утро и счастливый конец света всем вам, у меня есть проблема, связанная с датой, которая не связана с апокалипсисом

Я пытаюсь найти дату в текстовом документе. Строка с датой на ней имеет текст спереди и сзади, однако когда я использую TryParseExact, мне кажется, что я могу найти только дату, если она находится в начале строки текста.

Как бы я изменил приведенный ниже код для поиска даты, которая находится в пределах 20 символов в строке текста?

DateTime d = DateTime.Now;
            var format1 = "dd/MM/yyyy";
            var fileDates1 = System.IO.File.ReadAllLines(z)
                            .Where(l => l.Length >= format1.Length
                                        && DateTime.TryParseExact(l.Substring(0, format1.Length)

2 ответа

Решение

Ваш код действительно проверяется только в начале строки.

Вы можете объединить регулярное выражение, чтобы найти вещи, которые похожи на даты, и затем правильно проанализировать, чтобы проверить, что "дата" действительна:

DateTime d;
var format1 = "dd/MM/yyyy";
Regex r = new Regex("[0-3][0-9]/[0-1][0-9]/[0-9]{4}");
var linesWithDates = System.IO.File.ReadAllLines(z)
    .Where(l => r.Matches(l).Cast<Match>()
         .Any(DateTime.TryParseExact(m.Value, format1, ...)));

Вы можете использовать регулярное выражение, чтобы найти вашу дату в тексте;

String text = File.ReadAllLines(z);
String pattern = @"\d{2}/\d{2}/\d{4}";
String dateString = Regex.Match(text, pattern).Value;
Другие вопросы по тегам