View previous topic :: View next topic |
Как часто вы пользуетесь регулярными выражениями (RegEx)? |
Раз в день |
|
34% |
[ 35 ] |
Раз в неделю |
|
18% |
[ 19 ] |
Раз в месяц |
|
27% |
[ 28 ] |
А что это такое? |
|
19% |
[ 20 ] |
|
Total Votes : 102 |
|
Author |
Message |
Вахмурка
Joined: 27 Dec 2004 Posts: 2585 Location: Большая деревня Москва
|
(Separately) Posted: Fri Mar 31, 2006 20:28 Post subject: К ТСКВ: примеры регулярных выражений |
|
|
Не знаю как другим, но мне довольно редко приходится пользоваться регулярными выражениями в поиске. Тем не менее, приходится все-таки. Не имея достаточно опыта в этом деле и не чувствуя регэкспы "печенкой", я поступаю следующим образом. Создаю текстовый файл, где в столбик перечисляю все строки, которые хочу найти, а также кое-чего из того, что найти не хочу. Потом вызываю поиск, ставлю птицу 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 |
|
|
CaptainFlint
Joined: 14 Dec 2004 Posts: 6161 Location: Москва
|
(Separately) Posted: Fri Mar 31, 2006 21:10 Post subject: |
|
|
Пользуюсь, бывает, и чаще, чем раз в день. Тоталовские как-то не очень, гораздо мощнее и привычнее синтаксис EmEditor'а. Список, пожалуй, привести не могу, т.к. составляю каждый раз выражение "на лету", и очень редко использую одни и те же выражения по нескольку раз. Парочку периодически используемых всё же приведу.
1. Совсем простое: удалить все пустые строки.
Найти: \n\n
Заменить на: \n
2. Поиск всех повторяющихся строк (и, возможно, удаление дубликатов):
Найти: ([^\n]+)\n\1\n
Заменить на: \1\n
Дальше сами. |
|
Back to top |
|
|
Lamer
Joined: 20 Mar 2006 Posts: 522
|
|
Back to top |
|
|
Вахмурка
Joined: 27 Dec 2004 Posts: 2585 Location: Большая деревня Москва
|
(Separately) Posted: Fri Mar 31, 2006 21:31 Post subject: |
|
|
2CaptainFlint
Я все-таки имел в виду регулярные выражения в Total Commander . EmEditor - замечательнй редактор (с твоей же подачи), но для него есть свой форум.
2Lamer
По ссылке в моем посте (или см. ссылку в справке по ТС, RegEx) можно скачать hlp-файл, с которым приведенная тобой ссылка совпадает. Я в своем ТС всегда в оффлайне, поэтому читаю не интеренет-страничку, а hlp-файл. И даже там примеров маловато. _________________ Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон) |
|
Back to top |
|
|
Lamer
Joined: 20 Mar 2006 Posts: 522
|
(Separately) Posted: Fri Mar 31, 2006 21:50 Post subject: |
|
|
Прошу прощения,не заметил.Действительно то же самое.Pardon. |
|
Back to top |
|
|
CaptainFlint
Joined: 14 Dec 2004 Posts: 6161 Location: Москва
|
(Separately) Posted: Fri Mar 31, 2006 22:00 Post subject: |
|
|
Вахмурка
Quote: | Я все-таки имел в виду регулярные выражения в Total Commander |
А, ну тогда так и надо было говорить. |
|
Back to top |
|
|
Вахмурка
Joined: 27 Dec 2004 Posts: 2585 Location: Большая деревня Москва
|
|
Back to top |
|
|
Lev
Joined: 02 Mar 2005 Posts: 392
|
(Separately) Posted: Tue Apr 04, 2006 15:00 Post subject: |
|
|
Некоторые примеры можно посмотреть в Regexp Content Plugin |
|
Back to top |
|
|
D1P
Joined: 20 Dec 2004 Posts: 2973 Location: Тбилиси
|
(Separately) Posted: Thu May 11, 2006 13:28 Post subject: |
|
|
Гм, судя по всему не очень-то активно люди регэкспами пользуются. А ведь действительно - тема, как говорится, не раскрыта, и в TCKB про них написано очень мало. Я регэкспы и сам практически не использую, потому хороший мануал написать не смогу. Может возьмётся кто? _________________ База знаний о Total Commander
Блог |
|
Back to top |
|
|
Lev
Joined: 02 Mar 2005 Posts: 392
|
(Separately) Posted: Thu May 11, 2006 16:46 Post subject: |
|
|
А что должно быть в мануале окромя того, что есть в упомянутых ссылках? |
|
Back to top |
|
|
D1P
Joined: 20 Dec 2004 Posts: 2973 Location: Тбилиси
|
|
Back to top |
|
|
Lev
Joined: 02 Mar 2005 Posts: 392
|
(Separately) Posted: Thu May 11, 2006 17:28 Post subject: |
|
|
Ну, вот, комментарии к некоторым регекспам включенным в образцы упомянутого мной выше плагина
Ищем файлы типа
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 |
|
|
Моторокер
Joined: 06 May 2005 Posts: 1517 Location: г. Пермь (читается Перьмь)
|
(Separately) Posted: Fri May 12, 2006 08:14 Post subject: |
|
|
Приведение 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. Приходится два языка выражений знать путаться, и вспоминать, где что. |
|
Back to top |
|
|
Ник
Joined: 15 Dec 2004 Posts: 1256 Location: Москва
|
(Separately) Posted: Wed Apr 04, 2007 14:38 Post subject: |
|
|
А как сделать поиск всех файлов в ТК, в именах которых есть что-то ещё, кроме латиницы (стандартной, нерасширенной), кириллицы русской, пробелов и подчерков?
Я пробовал вот это:
(\S|\W) - русские буквы не считает за буквы
[^a-zA-Zа-яА-Я\s_] - не работает
([^a-zA-Zа-яА-Я _]+) - не работает
Никто не подскажет?
Что-то когда-то проскакивало, но в он-лайн базе по ТК я не нашёл... _________________ Xubuntu |
|
Back to top |
|
|
CaptainFlint
Joined: 14 Dec 2004 Posts: 6161 Location: Москва
|
(Separately) Posted: Wed Apr 04, 2007 14:50 Post subject: |
|
|
Ник wrote: | [^a-zA-Zа-яА-Я\s_] - не работает |
Почему не работает? Нормально работает. Только точку (разделитель имени и расширения) тоже считает за искомый символ (и правильно, в общем-то, делает. Надо точку с расширением вынести за пределы выражения). _________________ Почему же, ё-моё, ты нигде не пишешь "ё"? |
|
Back to top |
|
|
|
|
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
|