Как получить 2 поля в одной группе с регулярным выражением? - PullRequest
0 голосов
/ 29 января 2019

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

В файле есть две строки:

Дата начала скрипта: Пт 11/10 / 2017
Время запуска сценария: 23: 26: 20.61

Мне нужна дата начала в одной группе (Пт 11/10/2017 23: 26: 20.61).Как я могу собрать их в одну группу с помощью регулярных выражений?Могу ли я исключить строку «Время начала скрипта:» между 2 полями или, может быть, можно собрать 2 поля в группы, а затем каким-то образом объединить их в одну группу?

Ответы [ 2 ]

0 голосов
/ 29 января 2019

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

    var inputTxt = "Script Start Date: Fri 11/10/2017 \n Script Start Time: 23:26:20.61";
    var firstCondition = "Start Date: ";
    var dateIndex = inputTxt.IndexOf(firstCondition) + firstCondition.Length;

    var secondCondition = "Start Time: ";
    var timeIndex = inputTxt.IndexOf(secondCondition) + secondCondition.Length;
    //gets format count (no need to change)
    var dl = "Fri 11/10/2017";
    var tl = "23:26:20.61";
    //result
    var date = inputTxt.Substring(dateIndex, dl.Length) + " " + inputTxt.Substring(timeIndex, tl.Length);
0 голосов
/ 29 января 2019

Попробуйте это:

  string fileContent = File.ReadAllText(@"path to txt file");
  Match match = Regex.Match(fileContent, @"Script Start Date: (.+)\nScript Start Time: (.+)");
  if (match.Success)
  {
    // Here I use Substring method, to cut out "Fri", as it's not necessary to parse to DateTime
    DateTime.TryParse(match.Groups[1].Value.Substring(4) + " " + match.Groups[2], out DateTime dt);
    Console.WriteLine(dt);
    Console.ReadKey();
  }

Объяснение шаблона: Script Start Date: (.+)\nScript Start Time: (.+):

Сначала он ищет слова Script Start Date:, затем он захватывает в первую группу все до концастрока (часть даты), затем она соответствует символу новой строки (\n), затем снова буквально соответствует Script Start Time: и затем захватывает остаток строки во вторую группу захвата (часть времени).

Затем япроверьте, было ли совпадение успешным, если оно было, используйте группирующие группы для создания DateTime переменной.

РЕДАКТИРОВАТЬ:

Используйте этот шаблон Script Start Date: \w+ (.+)\nScript Start Time: (.+), так что вы можете объединить две группы и непосредственно иметьdatetime в хорошо известном формате (я добавил \w+, чтобы соответствовать Fri, день в целом, и захватил только правильную часть даты).Затем используйте первую и вторую группы захвата, чтобы иметь дату.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...