powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Regex У попа была собака...
8 сообщений из 8, страница 1 из 1
Regex У попа была собака...
    #39459032
S_A_V_e
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.

Вот стишок:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
У попа была собака
Он её любил
Она съела кусок мяса
Он её убил
И на могиле написал
У попа  жила  собака
Он её любил
Она съела кусок мяса
Он её убил
И на могиле написал
У попа была собака
Он её любил
Она съела кусок мяса
Он её убил
И на могиле написал
У попа была собака
Он её любил
Она съела кусок мяса
Он её убил
И на могиле написал

Вводные данные такие:
Куплет начинается с У попа... и идёт до следующего У попа... или от У попа... до конца текста.
В куплете обязательно должно быть слово была . В приведенном стихе один куплет "бракованный" и содержит жила вместо была .
Регулярке должны соответствовать все куплеты содержащие была .

Пытался сделать что то вот такое, но это не работает:
Код: c#
1.
^(У попа)(.*?(?=(была)).*?(?=(У попа)))((?=(У попа))|$)



Подскажите пожалуйста как составить правильное выражение.
Заранее благодарю за ответы и помощь.
...
Рейтинг: 0 / 0
Regex У попа была собака...
    #39459043
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему используется ^ и $ ?
Какое фактическое разделение между куплетами и строками?
...
Рейтинг: 0 / 0
Regex У попа была собака...
    #39459156
S_A_V_e
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
^ используется т.к. У попа точно начинается с новой строки
Разделение на строки - полагаю \n (или \r\n - на 100% не уверен). Собственно в точности как приведено в стишке
Разделение на куплеты:
Или весь текст от У попа (включительно) до следующего У попа (не включая)
Или от У попа до конца текста (если это последний куплет). Для этого случая пытался использовать $.
...
Рейтинг: 0 / 0
Regex У попа была собака...
    #39459157
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
жесть.
я пас.

прикладной смысл у этой задачи есть?
...
Рейтинг: 0 / 0
Regex У попа была собака...
    #39459170
S_A_V_e
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача прикладная.
Есть лог файлы создаваемые log4net. Формат лога известен - каждая запись stack trace-a начинается с новой строки с указанием даты и времени ( У попа ). Приложение пишет туда массу exception-ов. Причём большая часть из них - одни и те же повторяющиеся ошибки ( У попа ... на могиле написал ). Файлы вырастают до мегабайтов и где то внутри находится полезная информация об одном не регулярном exception-e который меня интересует. Повторяющиеся ошибки можно идентифицировать по токену ( была ). А информации о не регулярном exception-e нет за исключением того что он не содержит токен. Задача состоит в том что бы вырезать все регулярные ошибки и оставить только полезную информацию.
Я легко могу решить задачу средствами C#. Например находить все начала stack trace-ов по дате используя regexp, затем брать все куски от одного до другого совпадения и проверять строку на string.Contains(token). Но это как то не очень решение. Думаю должно быть одно регулярное выражение которое решает задачу.
...
Рейтинг: 0 / 0
Regex У попа была собака...
    #39460069
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S_A_V_eот У попа до конца текста (если это последний куплет). Для этого случая пытался использовать $.

Для конца текста нужно использовать >>>\Z<<<

Также нужно указать опции: SingleLine - чтобы метасимвол >>>.<<< матчил в том числе и переводы строк и Multiline - чтобы метасимвол >>>^<<< матчил начало любой строки, а не только текста целиком.

Что-то в этом роде:

Код: c#
1.
2.
3.
var pattern = @"^У попа.*?была.*?(?=У попа|\Z)";
var options = RegexOptions.Singleline | RegexOptions.Multiline;
var matches = Regex.Matches(text, pattern, options);



Но всё же это не то. Надо ещё подумать.
...
Рейтинг: 0 / 0
Regex У попа была собака...
    #39460332
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S_A_V_eПовторяющиеся ошибки можно идентифицировать по токену ( была ). А информации о не регулярном exception-e нет за исключением того что он не содержит токен. Задача состоит в том что бы вырезать все регулярные ошибки и оставить только полезную информацию.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
var text = File.ReadAllText("test.txt");

var pattern = @"^У попа((?!была).)*(?=У попа|\Z)";

var options = RegexOptions.Singleline | RegexOptions.Multiline;

var matches = Regex.Matches(text, pattern, options);

foreach (Match m in matches)
    Console.WriteLine(m.Value);



Вырезаются все куски, содержащие токен была . Остаются только нужные.
...
Рейтинг: 0 / 0
Regex У попа была собака...
    #39460538
S_A_V_e
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо большое!
То что нужно. То же копал в этом направлении, но не додумался.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Regex У попа была собака...
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]