У меня есть программа на C#, которая проходит через журналы SAS, и я хочу, чтобы она вытащила строки с ошибкой.Регулярное выражение для нескольких строк
Например, если мой файл журнала содержит следующие строки:
WARNING: Apparent invocation of macro EDIT_TEXT not resolved.
ERROR 180-322: Statement is not valid or it is used out of proper order.
ERROR: SAS ended due to errors.
You specified: OPTIONS ERRORABEND;.
ERROR: Errors printed on page 4.
NOTE: SAS Institute Inc., SAS Campus Drive, Cary, NC USA 27513-2414
NOTE: The SAS System used:
real time 1.37 seconds
cpu time 0.38 seconds
Я хочу, чтобы вернуться
ERROR: SAS ended due to errors. You specified: OPTIONS ERRORABEND;.
ERROR: Errors printed on page 4.
но возвращает только
ERROR: SAS ended due to errors.
Это код, который я с использованием:
Match match;
Regex regex;
StreamReader sr;
string log;
sr = new StreamReader(path + ".log");
log = sr.ReadToEnd();
sr.Close();
regex = new Regex("ERROR: [^\\r]+\\r");
match = regex.Match(log);
Я не уверен, что изменить на регулярном выражении, чтобы исправить это. Thanks
Используйте [ '(м?)^ОШИБКА:. * (?: \ n (?! ERROR:). *) * '] (http://regexstorm.net/tester?p=%5eERROR%3a+.*%28%3f%3a%5cn%28%3f! ERROR% 3a +% 29. *% 29 * & я = ERROR% 3a + SAS + закончилась + из-за + к + ошибок.% 0D% 0A +++ Вы + указанный% 3a + OPTIONS + ERRORABEND% 3б.% 0D% 0aERROR% 3a + ошибки + + на печатной странице + + 4. & о = м). Или, split with '(? M)^(? = ERROR:)' –
Как регулярное выражение может знать, что следующая строка относится к сообщению об ошибке? Это потому, что это отступы? Я думаю, вам нужно предоставить более крупный пример, который также содержит строки, которые вы не хотите извлекать, иначе будет сложно найти правило, которое работает. –
Привет, Тим, я обновил свой оригинальный пост с большим количеством текста из журнала. –