К ТСКВ: примеры регулярных выражений
Select messages from
# through # FAQ
[/[Print]\]
Goto page 1, 2, 3, 4, 5, 6, 7, 8, 9  Next  :| |:
Total Commander -> Общие вопросы
Как часто вы пользуетесь регулярными выражениями (RegEx)?
Раз в день
35%
 35%  [ 33 ]
Раз в неделю
18%
 18%  [ 17 ]
Раз в месяц
26%
 26%  [ 25 ]
А что это такое?
19%
 19%  [ 18 ]
Total Votes : 93


#1: К ТСКВ: примеры регулярных выражений Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Fri Mar 31, 2006 20:28
    —
Не знаю как другим, но мне довольно редко приходится пользоваться регулярными выражениями в поиске. Тем не менее, приходится все-таки. Не имея достаточно опыта в этом деле и не чувствуя регэкспы "печенкой", я поступаю следующим образом. Создаю текстовый файл, где в столбик перечисляю все строки, которые хочу найти, а также кое-чего из того, что найти не хочу. Потом вызываю поиск, ставлю птицу RegEx и пробую. Иногда долго.

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

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

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

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

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

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

Предлагаю всем, обладающим хоть малым опытом в этом деле, указанным опытом поделиться.


Last edited by Вахмурка on Fri Mar 31, 2006 21:33; edited 1 time in total

#2:  Author: CaptainFlintLocation: Москва PostPosted: Fri Mar 31, 2006 21:10
    —
Пользуюсь, бывает, и чаще, чем раз в день. Тоталовские как-то не очень, гораздо мощнее и привычнее синтаксис EmEditor'а. Список, пожалуй, привести не могу, т.к. составляю каждый раз выражение "на лету", и очень редко использую одни и те же выражения по нескольку раз. Парочку периодически используемых всё же приведу.

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

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

Дальше сами. Smile

#3:  Author: Lamer PostPosted: Fri Mar 31, 2006 21:20
    —
Кажется, это http://www.westbyte.com/dm/index.phtml?page=faq_re_ru&lng=Russian имеет непосредственное отношение к subj.

#4:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Fri Mar 31, 2006 21:31
    —
2CaptainFlint
Я все-таки имел в виду регулярные выражения в Total Commander Smile. EmEditor - замечательнй редактор (с твоей же подачи), но для него есть свой форум.

2Lamer
По ссылке в моем посте (или см. ссылку в справке по ТС, RegEx) можно скачать hlp-файл, с которым приведенная тобой ссылка совпадает. Я в своем ТС всегда в оффлайне, поэтому читаю не интеренет-страничку, а hlp-файл. И даже там примеров маловато.

#5:  Author: Lamer PostPosted: Fri Mar 31, 2006 21:50
    —
Прошу прощения,не заметил.Действительно то же самое.Pardon.

#6:  Author: CaptainFlintLocation: Москва PostPosted: Fri Mar 31, 2006 22:00
    —
Вахмурка
Quote:
Я все-таки имел в виду регулярные выражения в Total Commander

А, ну тогда так и надо было говорить. Smile

#7:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Fri Mar 31, 2006 22:48
    —
А я так и сказал: ТСКВ - это Total Commander Knowledge Base, не так ли? Smile

#8:  Author: Lev PostPosted: Tue Apr 04, 2006 15:00
    —
Некоторые примеры можно посмотреть в Regexp Content Plugin

#9:  Author: D1PLocation: Москва PostPosted: Thu May 11, 2006 13:28
    —
Гм, судя по всему не очень-то активно люди регэкспами пользуются. А ведь действительно - тема, как говорится, не раскрыта, и в TCKB про них написано очень мало. Я регэкспы и сам практически не использую, потому хороший мануал написать не смогу. Может возьмётся кто?

#10:  Author: Lev PostPosted: Thu May 11, 2006 16:46
    —
А что должно быть в мануале окромя того, что есть в упомянутых ссылках?

#11:  Author: D1PLocation: Москва PostPosted: Thu May 11, 2006 17:07
    —
Больше примеров, хороших и разных. Как конкретно их использовать в TC. Как ими пользоваться в MRT.

#12:  Author: Lev PostPosted: Thu May 11, 2006 17:28
    —
Ну, вот, комментарии к некоторым регекспам включенным в образцы упомянутого мной выше плагина

Ищем файлы типа
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

#13:  Author: МоторокерLocation: г. Пермь (читается Перьмь) PostPosted: Fri May 12, 2006 08:14
    —
Приведение 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 путаться, и вспоминать, где что.

#14:  Author: НикLocation: Москва PostPosted: Wed Apr 04, 2007 14:38
    —
А как сделать поиск всех файлов в ТК, в именах которых есть что-то ещё, кроме латиницы (стандартной, нерасширенной), кириллицы русской, пробелов и подчерков?

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

Никто не подскажет?
Что-то когда-то проскакивало, но в он-лайн базе по ТК я не нашёл...

#15:  Author: CaptainFlintLocation: Москва PostPosted: Wed Apr 04, 2007 14:50
    —
Ник wrote:
[^a-zA-Zа-яА-Я\s_] - не работает

Почему не работает? Нормально работает. Только точку (разделитель имени и расширения) тоже считает за искомый символ (и правильно, в общем-то, делает. Надо точку с расширением вынести за пределы выражения).



Total Commander -> Общие вопросы


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Goto page 1, 2, 3, 4, 5, 6, 7, 8, 9  Next  :| |:
Page 1 of 9

Powered by phpBB © 2001, 2005 phpBB Group