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 1, 2, 3, 4, 5, 6, 7, 8  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Общие вопросы printer-friendly view
View previous topic :: View next topic  

Как часто вы пользуетесь регулярными выражениями (RegEx)?
Раз в день
35%
 35%  [ 33 ]
Раз в неделю
18%
 18%  [ 17 ]
Раз в месяц
27%
 27%  [ 25 ]
А что это такое?
18%
 18%  [ 17 ]
Total Votes : 92

Author Message
Вахмурка



Joined: 27 Dec 2004
Posts: 2457
Location: Большая деревня Москва

Post (Separately) Posted: Fri Mar 31, 2006 20:28    Post subject: К ТСКВ: примеры регулярных выражений Reply with quote

Не знаю как другим, но мне довольно редко приходится пользоваться регулярными выражениями в поиске. Тем не менее, приходится все-таки. Не имея достаточно опыта в этом деле и не чувствуя регэкспы "печенкой", я поступаю следующим образом. Создаю текстовый файл, где в столбик перечисляю все строки, которые хочу найти, а также кое-чего из того, что найти не хочу. Потом вызываю поиск, ставлю птицу RegEx и пробую. Иногда долго.

В один прекрасный момент я подумал - а не создать ли файлик с удачными примерами, чтобы потом, при похожей задаче, действовать по принципу "внешних аналогий". Те примеры, что приведены в справке ТС, и даже в описаниях с http://anso.da.ru, описывают лишь 1% возможных случаев. А регулярные выражения - тема мощная, сложная и многогранная, сколько примеров ни приведи, все равно мало будет. Но курочка по зернышку клюет...

Упомянутый мой файлик с примерами растет медленно (говорю же, редко пользуюь), но все-таки растет. И вот я подумал - а не добавить ли в ТСКВ много примеров, чтобы ими пользовались все - ведь даже знатоку зачастую проще взять готовый велосипед, чем изобретать свой.

Приведу один пример. Однажды мне понадобилось найти в файлах рассылок описание утилиты, которая создает список поддиректорий. Вот какие строки я искал:
Code:

список директори
списки директори
списка директори
список папок
списки папок
списка папок
список поддиректори
списки поддиректори
списка поддиректори
список подпапок
списки подпапок
списка подпапок

И вот какое регулярное выражение я подобрал, чтобы это описать:

спис(ок|ки|ка)\s(под|)(директори|пап)

Предлагаю всем, обладающим хоть малым опытом в этом деле, указанным опытом поделиться.
_________________
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)


Last edited by Вахмурка on Fri Mar 31, 2006 21:33; edited 1 time in total
Back to top
View user's profile Send private message
CaptainFlint



Joined: 14 Dec 2004
Posts: 5798
Location: Москва

Post (Separately) Posted: Fri Mar 31, 2006 21:10    Post subject: Reply with quote

Пользуюсь, бывает, и чаще, чем раз в день. Тоталовские как-то не очень, гораздо мощнее и привычнее синтаксис EmEditor'а. Список, пожалуй, привести не могу, т.к. составляю каждый раз выражение "на лету", и очень редко использую одни и те же выражения по нескольку раз. Парочку периодически используемых всё же приведу.

1. Совсем простое: удалить все пустые строки.
Найти: \n\n
Заменить на: \n

2. Поиск всех повторяющихся строк (и, возможно, удаление дубликатов):
Найти: ([^\n]+)\n\1\n
Заменить на: \1\n

Дальше сами. Smile
Back to top
View user's profile Send private message
Lamer



Joined: 20 Mar 2006
Posts: 522

Post (Separately) Posted: Fri Mar 31, 2006 21:20    Post subject: Reply with quote

Кажется, это http://www.westbyte.com/dm/index.phtml?page=faq_re_ru&lng=Russian имеет непосредственное отношение к subj.
Back to top
View user's profile Send private message
Вахмурка



Joined: 27 Dec 2004
Posts: 2457
Location: Большая деревня Москва

Post (Separately) Posted: Fri Mar 31, 2006 21:31    Post subject: Reply with quote

2CaptainFlint
Я все-таки имел в виду регулярные выражения в Total Commander Smile. EmEditor - замечательнй редактор (с твоей же подачи), но для него есть свой форум.

2Lamer
По ссылке в моем посте (или см. ссылку в справке по ТС, RegEx) можно скачать hlp-файл, с которым приведенная тобой ссылка совпадает. Я в своем ТС всегда в оффлайне, поэтому читаю не интеренет-страничку, а hlp-файл. И даже там примеров маловато.
_________________
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Back to top
View user's profile Send private message
Lamer



Joined: 20 Mar 2006
Posts: 522

Post (Separately) Posted: Fri Mar 31, 2006 21:50    Post subject: Reply with quote

Прошу прощения,не заметил.Действительно то же самое.Pardon.
Back to top
View user's profile Send private message
CaptainFlint



Joined: 14 Dec 2004
Posts: 5798
Location: Москва

Post (Separately) Posted: Fri Mar 31, 2006 22:00    Post subject: Reply with quote

Вахмурка
Quote:
Я все-таки имел в виду регулярные выражения в Total Commander

А, ну тогда так и надо было говорить. Smile
Back to top
View user's profile Send private message
Вахмурка



Joined: 27 Dec 2004
Posts: 2457
Location: Большая деревня Москва

Post (Separately) Posted: Fri Mar 31, 2006 22:48    Post subject: Reply with quote

А я так и сказал: ТСКВ - это Total Commander Knowledge Base, не так ли? Smile
_________________
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Back to top
View user's profile Send private message
Lev



Joined: 02 Mar 2005
Posts: 392

Post (Separately) Posted: Tue Apr 04, 2006 15:00    Post subject: Reply with quote

Некоторые примеры можно посмотреть в Regexp Content Plugin
Back to top
View user's profile Send private message
D1P



Joined: 20 Dec 2004
Posts: 2841
Location: Москва

Post (Separately) Posted: Thu May 11, 2006 13:28    Post subject: Reply with quote

Гм, судя по всему не очень-то активно люди регэкспами пользуются. А ведь действительно - тема, как говорится, не раскрыта, и в TCKB про них написано очень мало. Я регэкспы и сам практически не использую, потому хороший мануал написать не смогу. Может возьмётся кто?
_________________
База знаний о Total Commander
Блог
Back to top
View user's profile Send private message
Lev



Joined: 02 Mar 2005
Posts: 392

Post (Separately) Posted: Thu May 11, 2006 16:46    Post subject: Reply with quote

А что должно быть в мануале окромя того, что есть в упомянутых ссылках?
Back to top
View user's profile Send private message
D1P



Joined: 20 Dec 2004
Posts: 2841
Location: Москва

Post (Separately) Posted: Thu May 11, 2006 17:07    Post subject: Reply with quote

Больше примеров, хороших и разных. Как конкретно их использовать в TC. Как ими пользоваться в MRT.
_________________
База знаний о Total Commander
Блог
Back to top
View user's profile Send private message
Lev



Joined: 02 Mar 2005
Posts: 392

Post (Separately) Posted: Thu May 11, 2006 17:28    Post subject: Reply with quote

Ну, вот, комментарии к некоторым регекспам включенным в образцы упомянутого мной выше плагина

Ищем файлы типа
autobackup_of_aaa.cdr
backup_of_aaa.cdr
aaa.cdr
удаляем autobackup_of_ и backup_of_, добавляем пометку bak в конец
в результате можем отсортировать кореловские файлы так, чтобы бакапы находились рядом с оригиналами
[cdr backup]
Find="(auto)*backup_of_(.*\.cdr$)"
Change="$2 bak"

Ищем файлы с расширением exe, помещаем в колонку цифру "1", после сортировки по данной колонке exe-файлы идут первыми (последними)
[exe files up]
Find="\.(exe)$"
Change="1"
Substitute=1
Others=1

убираем tn_ и _tn в директории со скачанным сайтом, после сортировки имеем рядом оригиналы картинок и их превьюшки
[tn remove]
;removes tn from files like tn_pic1.jpg or pic1_tn.jpg
Find="(tn_|_tn)"

Добавляем ноль к цифре стоящей перед точкой
[file1->file01]
Find="(\D)(\d\.)"
Change="$1\0$2"

Добавляем ноль к одной-двум цифрам стоящим перед точкой
[0]
Find="(\D)(\d{2}\.)"
Change="$1\0$2"
Others=0

Добавляем пару нолей
[00]
Find="(\D)(\d\.)"
Change="$1\00$2"
Others=0

удаляем из имён файлов скачанных с инета цифры стоящие в фигурных, круглых, квадратных скобках
[delete figures in brackets]
Find="(\[|\(|{)\d+(\]|\)|})"

Удаляем tn_, _tn, цифры в квадратных скобках
[tn+]
Find="(tn_|_tn|\[\d+\])"

Переставляем пары цифр, полезно для сортировки файлов имеющих в своём имени дату
[efir]
find="(\d{2})\.(\d{2})\.(\d{2})"
change="$3$2$1"
ParseDirs=1
Substitute=1
others=0
Back to top
View user's profile Send private message
Моторокер



Joined: 06 May 2005
Posts: 1473
Location: г. Пермь (читается Перьмь)

Post (Separately) Posted: Fri May 12, 2006 08:14    Post subject: Reply with quote

Приведение MP3 коллекции к общему виду:
Переименование папок с MP3CD дисков с названиями
01 Load (1996) в
Metallica [1996] Load для более внятного вида
Find=\d\d (.*)\((\d\d\d\d)\)
Change=Metallica [$2] $1

Переименование песен внутри этих папок (удаление тире после цифр)
01 - Ain't My Bitch.mp3 в
01 Ain't My Bitch.mp3
Find=^(\d\d) - (.*)
Change=$1 $2

В русской справке к TC непонятно описана работа – информация разбросана. В Word'е например все ясно и наглядно.
Еще бы хорошо как в Word'е выбирать выражения из меню, но там и так компонентов налеплено в кучу.
Чаще в Word'е пользуюсь ими, чем в TC. Приходится два языка выражений знать Smile путаться, и вспоминать, где что.
Back to top
View user's profile Send private message
Ник



Joined: 15 Dec 2004
Posts: 1238
Location: Москва

Post (Separately) Posted: Wed Apr 04, 2007 14:38    Post subject: Reply with quote

А как сделать поиск всех файлов в ТК, в именах которых есть что-то ещё, кроме латиницы (стандартной, нерасширенной), кириллицы русской, пробелов и подчерков?

Я пробовал вот это:
(\S|\W) - русские буквы не считает за буквы
[^a-zA-Zа-яА-Я\s_] - не работает
([^a-zA-Zа-яА-Я _]+) - не работает

Никто не подскажет?
Что-то когда-то проскакивало, но в он-лайн базе по ТК я не нашёл...
_________________
Xubuntu 17.04-64
Back to top
View user's profile Send private message
CaptainFlint



Joined: 14 Dec 2004
Posts: 5798
Location: Москва

Post (Separately) Posted: Wed Apr 04, 2007 14:50    Post subject: Reply with quote

Ник wrote:
[^a-zA-Zа-яА-Я\s_] - не работает

Почему не работает? Нормально работает. Только точку (разделитель имени и расширения) тоже считает за искомый символ (и правильно, в общем-то, делает. Надо точку с расширением вынести за пределы выражения).
_________________
Почему же, ё-моё, ты нигде не пишешь "ё"?
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 1, 2, 3, 4, 5, 6, 7, 8  Next
Page 1 of 8

 
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