Извлечь DateTime из строки - PullRequest
1 голос
/ 27 марта 2020

При циклическом просмотре элементов в Списке <string> Я хочу извлечь первое время даты .

Это строка выборки, где в этом случае месяц представляет собой один ди git, месяц также может быть двойным ди git, например, 12, но не говорить 01.

string line = "\\\\SomeServer\\HTTP\\demo1\\index.cfm 4 KB CFM " + 
              "File 2/19/2019 3:48:21 PM " + 
              "2/19/2019 1:05:53 PM 2/19/2019 1:05:53 PM 5";

Ожидаемый результат будет

2/19/2019 3:48 : 21:00

Я рассмотрел здесь пример кода с различными регулярными выражениями, ниже приведен пример, который правильно обрабатывает только отдельные ди git месяцы и не возвращает часть времени для даты (как я не знаю, какой шаблон использовать).

var line = "\\\\SomeServer\\HTTP\\FolderName\\index.cfm 4 KB CFM " +
           "File 02/19/2019 3:48:21 PM " +
           "2/19/2019 1:05:53 PM 2/19/2019 1:05:53 PM 5";

var match = Regex.Match(line, 
    @"\d{2}\/\d{2}\/\d{4}");

var dateValue = match.Value;
if (!string.IsNullOrWhiteSpace(dateValue))
{

    var dateTime = DateTime.ParseExact(dateValue, 
        "MM/dd/yyyy", 
        CultureInfo.CurrentCulture);

    Console.WriteLine(
        dateTime.ToString(CultureInfo.InvariantCulture));
}

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

1 Ответ

2 голосов
/ 27 марта 2020

Вы можете использовать

\b\d{1,2}/\d{1,2}/\d{4}\s\d{1,2}:\d{2}:\d{2}\s?[AP]M\b

См. Демоверсию regex . Regex.Match даст вам первый матч.

Подробности

  • \b - граница слова
  • \d{1,2}/\d{1,2}/\d{4} - один или две цифры, /, одна или две цифры, /, четыре цифры
  • \s - пробел
  • \d{1,2}:\d{2}:\d{2} - 1 или 2 цифры, :, 2 цифры, :, 2 цифры
  • \s? - дополнительный пробел
  • [AP]M - AM или PM
  • \b - слово граница.
...