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: 2235
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: 1220

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: 2235
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
Orion9



Joined: 01 Jan 2024
Posts: 1220

Post (Separately) Posted: Tue Jul 21, 2026 12:23    Post subject: Reply with quote

yozhik wrote:
Но тогда придётся макрос каждый раз редактировать

А если макрос будет работать для выделенного текста? Smile

Я не отстаиваю свой вариант, тем более, что Batya ясно дал понять, что его интересуют регулярные выражения. Но перспектива лишний раз тыкнуть на кнопку меня совершенно не пугает. Иногда это даже требуется, например, чтобы увидеть сырые данные и убедиться в правильности действий.

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

Болвана можно и об этом спросить, жалко что ль Smile
 каков выигрыш в скорости

 если выразить в секундах

 если ini-файл 100 кб

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

 Болван

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

 Болван

yozhik wrote:
Неправда

Лет 15 назад, когда Интернет по-настоящему стал набирать обороты, популярным стало выражение "не всему, что написано в Интернете, нужно верить". То же самое сейчас можно сказать и о болване. Только опытный специалист, хорошо разбирающийся в вопросе, может сразу оценить - чушь он выдает или что-то полезное. И только опытный специалист может максимально извлечь из этого пользу. Вот вы хорошо разбираетесь в регэкспресах, поэтому и можете поржать (оценить юмор) с болванистых ответов, а ведь кто-то их за чистую монету может принять Smile
yozhik wrote:
лучше книжку Джеффри Фридла почитать

Так уже, это... лежит под подушкой. Спится намного крепче и слаще Laughing
Back to top
View user's profile Send private message
Batya



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

Post (Separately) Posted: Tue Jul 21, 2026 14:54    Post subject: Reply with quote

yozhik
Попробовал. Отлично! Результат меня устраивает.
(Жаль, что для изящности решения не получилось делать замену в один проход.)
Огромное спасибо!!!

Orion9
Спасибо за участие в решении и интерес к вопросу!
_________________
Нет, я не сплю. Я просто медленно моргаю.
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