Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Примеры регулярных выражений
Goto page Previous  1, 2
 
Post new topic   Reply to topic    Total Commander Forum Index -> Программное обеспечение printer-friendly view
View previous topic :: View next topic  
Author Message
yozhik



Joined: 04 May 2014
Posts: 347
Location: Электросталь

Post (Separately) Posted: Mon Jul 20, 2026 13:05    Post subject: Reply with quote

Orion9 wrote:
Сначала заменить _|_78_| на \n.

Да, но это в силе только для одного лога. А в другом логе начальное число будет другим и оно заранее неизвестно. Т.е. не соблюдается вот это условие:
Batya wrote:
начало табличного текста и начало каждой строки начинается с одинакового фрагмента, который меняется для каждого лога


Я, кажется, понял как нужно сделать. Сейчас только проверю работоспособность в NPP и дооформлю пост. (А потом и ещё и болванную оптимизацию прокомментируем)).
_________________
Amo ergo sum
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2234
Location: Москва, Россия

Post (Separately) Posted: Mon Jul 20, 2026 13:20    Post subject: Reply with quote

Orion9
Можно. Только я заранее не знаю точное значение начального фрагмента ("_|_78_|_"). Вместо "78" может быть любое число. При этом просто менять все числа я не могу. Надо поменять именно фрагмент, находящийся в начале, но который заранее не известен.
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
yozhik



Joined: 04 May 2014
Posts: 347
Location: Электросталь

Post (Separately) Posted: Mon Jul 20, 2026 13:58    Post subject: Reply with quote

Batya
 Условия списком, для удобства


Я бы сделал так. Разъединяю склеенные строки. Запускаю несколько раз следующую замену (найти/заменить):
Code:
(?m-s)^(_\|_\d+_\|_)(.+)(\1.+?)$
\1\2\r\n\3


За каждый проход эта регулярка будет «отщипывать» нужный нам блок от конца строки. Запускаю «несколько раз» — т.е. столько, сколько нужно. 100 раз, 200 раз. В зависимости от максимально возможного кол-ва склеенного. В конце это приведёт к требуемому виду:
Code:
_|_начало_|...
_|_начало_|...
_|_начало_|...
и т.п.


Условие 5 соблюдается, только придётся уточнить максимум.

Это по сути аналог обработки циклом в скрипте. Но у нас же макрос, а значит нас не заботит кол-во проходов регуляркой по тексту. И 100, и 200 отработают в долю секунды. Просто откопировать эту строку макроса столько раз, сколько нужно.

Этим соблюдается условие 3. Ведь, если я правильно понял, в каждом логе _|_начало_| будет одинаковым для всего лога. Т.о. мы не рискуем промахнуться.

После этой обработки можно и пустые строки удалить, и извлечь нужные блоки в отдельную вкладку, если помимо блоков там есть ещё ненужный текст.
_________________
Amo ergo sum


Last edited by yozhik on Mon Jul 20, 2026 14:02; edited 1 time in total
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 1219

Post (Separately) Posted: Mon Jul 20, 2026 14:01    Post subject: Reply with quote

yozhik wrote:
А в другом логе начальное число будет другим и оно заранее неизвестно.

Если табличная часть из лога извлекается пользователем, она всегда будет ему известна Smile
yozhik wrote:
(А потом и ещё и болванную оптимизацию прокомментируем)

Laughing
Да. Очень бы этого хотелось )
Back to top
View user's profile Send private message
yozhik



Joined: 04 May 2014
Posts: 347
Location: Электросталь

Post (Separately) Posted: Mon Jul 20, 2026 14:06    Post subject: Reply with quote

Orion9 wrote:
она всегда будет ему известна

Но тогда придётся макрос каждый раз редактировать )) А это неудобно.

Добавлено спустя 32 минуты:

Orion9
болван wrote:
избыточный бэктрекинг (откаты движка), который вызывают ленивые квантификаторы (+? и *?)

Это существенно только при обработке гигантских массивов (гиг текста). Или для подсветок (как в AkelPad), которые в фоне постоянно шуруют. В остальных случаях речь о микродолях секунды.

болван wrote:
(?i)\b(button|cmd|param|path|menu|iconic)(\d++)=(.*)

(?i) — лучше уточнить, что точка не захватывает перенос строки (?i-s), а то всякое бывает (общие настройки поменял временно и забыл).

(\d++) — одного плюса скорее всего хватит (\d+), т.к. обычно множители жадные по умолчанию (в справках об этом упоминают). В этом именно случае ++ или + большой разницы не даст, но вообще лучше не привыкать к ++, они иногда неожиданные сюрпризы подкидывают.

болван wrote:
Дело в том, что TRegExpr... имеет упрощенный, классический Perl-подобный синтаксис

Не понятно, «упрощенный» по сравнению с чем? В большинстве редакторов синтаксис даже до Perl не дотягивает.

болван wrote:
Дело в том, что TRegExpr... В ней отсутствует поддержка сверхжадных (possessive) квантификаторов

Неправда. Устаревшие сведения. Поддерживает, хоть и с ограничениями, но процентов 90 необходимости покрывает. И \d++ поддерживает точно.

А вообще, чем на болванов время тратить, лучше книжку Джеффри Фридла почитать. А после этого уже и с болванами работать ))
_________________
Amo ergo sum
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2234
Location: Москва, Россия

Post (Separately) Posted: Mon Jul 20, 2026 20:12    Post subject: Reply with quote

yozhik wrote:
(?m-s)^(_\|_\d+_\|_)(.+)(\1.+?)$
\1\2\r\n\3

Да, придётся, видимо, использовать множественный проход.
Спасибо! Завтра попробую.
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Программное обеспечение All times are GMT + 4 Hours
Goto page Previous  1, 2
Page 2 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group