2014-11-05 1 views
-1

В настоящее время я читаю файл журнала и вам нужно получить значение регистрационного номера, которое продолжает дату/время, и регулярное выражение соответствует текущей фразе. Кажется, моя проблема заключается в том, что мне нужно передать значение datetime() и номер записи() в той же группе. Я очень мало знаю о регулярном выражении, и любая помощь будет очень признательна. Мое приложение просматривает только каждые 15 минут в журнале, чтобы узнать, показалась ли эта ключевая формулировка, и почему есть lastFailTime.Используйте regex для получения номера после даты из текстового файла в группу LINQ

Код:

string str = File.ReadAllText(file); 

Regex regex = new Regex("(?<time>.+(AM|PM)).(?<after>[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]).*There was no endpoint listening"); 

    var lastFailTime = File.ReadLines(file) 
    .Select(line => regex.Match(line)) 
    .Where(m => m.Success) // take only matched lines 
    .Select(m => DateTime.Parse(m.Groups["time"].Value)) 
    .DefaultIfEmpty() // DateTime.Min if no failures 
    .Max(); 
+3

'line.Split() [3]'? –

+0

Почему бы не создать класс, являющийся структурой текстового файла, затем проанализировать этот файл и присвоить поля класса соответствующим значениям .. тогда вы можете получить правильные значения даты независимо от того, что – MethodMan

+0

@ L.B. У меня есть несколько регулярных выражений для этого проекта, потому что поставщик не обрабатывает исключения. Я смог получить дату/время и конкретную формулировку, но мое регулярное выражение для числа, следующего за датой, не получая значения. Я что-то упустил в своей структуре регулярных выражений? – clerktech

ответ

1

Как о чем-то вроде этого?

string result = Regex.Replace(searchText, "(?s)^(\\d+/\\d+/\\d+ \\d+:\\d+:\\d+ [APM]{2}) (\\d+) (.*)$", ""); 

Это регулярное выражение возвращает дату и время в первой группе, идентификатор во втором и все остальное (сообщение) в последнем.

Стандартная форма вышеуказанного регулярное выражение является

^(\d+/\d+/\d+ \d+:\d+:\d+ [APM]{2}) (\d+) (.*)$ 
+0

Благодарим вас за ценное решение. Regex - самая сложная вещь, с которой я столкнулся в своем опыте программирования. Я попробую это сегодня. 'searchText' будет моей переменной для конкретных слов, которые я ищу правильно? – clerktech