К ТСКВ: примеры регулярных выражений
Select messages from
# through # FAQ
[/[Print]\]

Total Commander -> Общие вопросы
Как часто вы пользуетесь регулярными выражениями (RegEx)?
Раз в день
34%
 34%  [ 36 ]
Раз в неделю
18%
 18%  [ 19 ]
Раз в месяц
27%
 27%  [ 28 ]
А что это такое?
19%
 19%  [ 20 ]
Total Votes : 103


#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_] - не работает

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

#16:  Author: НикLocation: Москва PostPosted: Wed Apr 04, 2007 15:16
    —
Code:
[^a-zA-Zа-яА-Я\s_0-9]

я это пишу в "Поиск с плагинами" и ставлю "Искать только в имени" и "regex"...

Вроде пока работает...

#17:  Author: CaptainFlintLocation: Москва PostPosted: Wed Apr 04, 2007 15:30
    —
Ник wrote:
я это пишу в "Поиск с плагинами" и ставлю "Искать только в имени" и "regex"...

Ну, можно и так, конечно...

#18:  Author: НикLocation: Москва PostPosted: Wed Apr 04, 2007 19:25
    —
Скажите, плз, как найти все файлы, начинающиеся со строчных букв?

Я пишу следующее:
Code:
^[^A-ZА-Я0-9]

но оно не работает - не ищет ничего Sad

#19:  Author: CaptainFlintLocation: Москва PostPosted: Wed Apr 04, 2007 19:37
    —
Попробуй отключить регистро-зависимый поиск. Smile

#20:  Author: НикLocation: Москва PostPosted: Wed Apr 04, 2007 20:19
    —
Пардон, это где?
По-моему, учёт регистра можно включать-выключать только при поиске по содержанию файлов, а не по именам...

Я же ищу через плагин с регеспами - хотя могу и просто поиск с регеспами...

#21:  Author: НикLocation: Москва PostPosted: Wed Apr 04, 2007 20:26
    —
Кстати, есть хитрая задача:

разные деятели шлют новости, часто путая в названиях (и в именах файлов, соответственно) русское С и английское C.
В принципе фиг с ним, но, если такое в самом начале слова, то грубо нарушается сортировка в директориях, что очень неудобно...

Можно ли сделать регесп, который бы искал файлы, на первом месте в именах которых стоит английская C, а потом идёт любая русская буква или стоит любая русская буква через пробел?

Спасибо Smile

#22:  Author: НикLocation: Москва PostPosted: Wed Apr 04, 2007 20:32
    —
CaptainFlint wrote:
Попробуй отключить регистро-зависимый поиск. Smile


Бляха-муха!
У меня в хелпе ТК написано:
Quote:
Модификаторы
Модификаторы используются для изменения поведения регулярных выражений.
(?i) Отключает проверку верхнего/нижнего регистра. В Total Commander это значение включено по умолчанию для имён файлов.
(?-i) Включает проверку регистра.


Что на чём стояло? что включает - а что выключает???

Короче, вот это заработало, ищет файлы, начинающиеся с маленьких букв обоих языков только - поиск без плагинов, но с регеспами:
Code:
(?-i)^[^A-ZА-Я0-9]

#23:  Author: CaptainFlintLocation: Москва PostPosted: Wed Apr 04, 2007 20:32
    —
Ник wrote:
Можно ли сделать регесп, который бы искал файлы, на первом месте в именах которых стоит английская C, а потом идёт любая русская буква или стоит любая русская буква через пробел?

Какие проблемы?
Code:
C ?[а-я]

#24:  Author: НикLocation: Москва PostPosted: Wed Apr 04, 2007 21:56
    —
Точнее:

Code:
^C ?[а-я]


и в поиск с плагинами - в именах файлов, с регеспами.

Только зачем пробел перед знаком вопроса - я так и не понял Sad

#25:  Author: CaptainFlintLocation: Москва PostPosted: Wed Apr 04, 2007 22:20
    —
Ник wrote:
Только зачем пробел перед знаком вопроса - я так и не понял

Ты ж сам писал:
Ник wrote:
или стоит любая русская буква через пробел?

Я так выражение и составил: либо английская "C", после которой сразу русская буква, либо английская "C", за которой пробел, а потом русская буква.

#26:  Author: Alextp PostPosted: Thu Apr 05, 2007 02:06
    —
Ник, ? означает "0 или 1 вхождение пред символа".
Т.е. " ?" означает "пробел есть или пробела нет".

Мой пример: ищу URL'ы. RegEx:
Code:
[a-z]+://[a-z.\d/_]+

#27:  Author: НикLocation: Москва PostPosted: Thu Apr 05, 2007 07:31
    —
Спасибо, мужики Smile
Я просто психологически не воспринял пробел как символ - устал к вечеру...

#28:  Author: НикLocation: Москва PostPosted: Thu Apr 05, 2007 18:54
    —
Поможите, плз Smile

Тут Гугл почему-то путает русский и украинский языки и шлёт некоторые новости с заголовками на украинском.
Мне нужно убрать из них символы, которые ТК и ZIP упорно считают "нелатинскими", т.е.:
i (в чём разница с латинским "i" я не знаю, но она есть)
ї
є


При попытке поиска и замены, ТК меняет все "i" - и украинские, и английские (получается "Lиght" вместо "Light")...
Как их различить и как правильно написать выражение для поиска и замены?

#29:  Author: Alextp PostPosted: Fri Apr 06, 2007 00:28
    —
Ник, в regex можно указывать символ по юникодному коду.
(Не проверял в Тотале!)

Quote:
\a alarm, that is, the BEL character (hex 07)
\cx "control-x", where x is any character
\e escape (hex 1B)
\f formfeed (hex 0C)
\n newline (hex 0A)
\r carriage return (hex 0D)
\t tab (hex 09)
\ddd character with octal code ddd, or backreference
\xhh character with hex code hh
\x{hhh..} character with hex code hhh..

After \x, from zero to two hexadecimal digits are read (letters can be in upper or lower case). Any number of hexadecimal digits may appear between \x{ and }, but the value of the character code must be less than 256 in non-UTF-8 mode, and less than 2**31 in UTF-8 mode (that is, the maximum hexadecimal value is 7FFFFFFF).

#30:  Author: НикLocation: Москва PostPosted: Fri Apr 06, 2007 07:31
    —
Спасибо, конечно, но как этот код для украинской кириллицы определить?!?!

#31:  Author: MaximusLocation: Украина, Кировоградская обл., г. Знаменка PostPosted: Fri Apr 06, 2007 09:28
    —
Ник
Не уверен, но попробуй с такими:
і - B3
ї - BF
є - BA

Quote:
в чём разница с латинским "i" я не знаю, но она есть
Еще бы ее не было. Между латинским "c" и русским "с" разница же есть Smile

#32:  Author: Alextp PostPosted: Fri Apr 06, 2007 11:33
    —
Ник
1. Попробовать варианты Maximus'а
2. Если не помогло: заархивировать файл WinRAR'ом, посмотреть дамп архива UV в hex режиме. Wink

#33:  Author: MaximusLocation: Украина, Кировоградская обл., г. Знаменка PostPosted: Fri Apr 06, 2007 12:02
    —
Alextp
WinRAR при архивировании заменяет буквы "і" и "ґ" на символы подчеркивания. Поэтому не уверен, что что-то можно будет выяснить.

#34:  Author: Alextp PostPosted: Fri Apr 06, 2007 13:28
    —
Maximus, Nick:
как просмотреть коды символов в имени файла:
http://forum.wincmd.ru/viewtopic.php?p=27151#27151

#35:  Author: НикLocation: Москва PostPosted: Fri Apr 06, 2007 17:31
    —
Оказалось всё проще - имена файлов - это имена новостей, которые есть в теле файла, HEX-просмотр дал нужный результат.

Итак, I (укр) это B2, причём, если просто копи-паст - то она не заменяется на I (англ), если через HEX - то заменяется.
В то же время, i (укр) через копи-паст почему-то легко заменяется на i (англ).

Копи-паст ессно не напрямую из The Bat в ТК, а через понимающий Уникод текстовый редактор...

#36:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Tue Dec 01, 2009 23:11
    —
Продолжаю собственный проект по сбору различных примеров применения регулярных выражений. Возможно, когда-то кто-то их отсортирует, отредактирует и положит в тихое теплое место (типа ТСКВ)...

Есть файлы типа
Code:
IMG_0075.jpg
IMG_0078.jpg
IMG_0084.jpg
IMG_0526.jpg
Изображение 367.jpg
Изображение в2.jpg
Изображение в4.jpg
Требуется удалить "буквенную" часть имени, то есть получить
Code:
0075.jpg
0078.jpg
0084.jpg
0526.jpg
367.jpg
2.jpg
4.jpg

Ответы:

Rodny:
Найти: (\D)+(\d+\..+)
Заменить: $2

Tol!k:
Найти: (\..+)|\D
Заменить: $1

Моторокер:
Найти: ^\D+
Заменить: <Пусто>

Подробности здесь.

#37:  Author: D1PLocation: Тбилиси PostPosted: Wed Dec 02, 2009 09:01
    —
Вахмурка
А самому в тихое место выложить что мешает?

#38:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Wed Dec 02, 2009 10:52
    —
Незнание предмета. Видишь, люди аж три варианта предложили, а я и одного осилить не смог. Хотя с более простыми задачами вроде справляюсь.
Следовательно, моя низкая компетентность не позволит оценить, насколько тот или иной пример сложен/важен/типичен, и т. д. Для такой работы нужен кто-то более подготовленный и подкованный.

#39:  Author: Lev PostPosted: Wed Dec 02, 2009 16:55
    —
Для подкованного многие регекспы покажутся примитивными и он не станет их никуда включать. Тут как раз лучше начинающий-середнячок.

по регекспам
Они сработают на данных в примере файлах, но пользователь может обработать ими все файлы в директории в т.ч. не совсем соответствующие примерам, например без цифр в имени, с несколькими точками, с цифрами перемежающимися буквами. Как уже упоминалось в обсуждении пример от Rodny работает перед первой точкой в имени файла - удалит последовательность нецифр перед цифрами с последующей точкой. Имхо первое экранирование в регекспе излишне. Можно убрать первые скобки и менять на $1, результат действия не изменится. Для меня данный регексп не совсем корректен как пример для обучения.
Пример от Tol!k убъёт все нецифры в имени файла оставив от файлов без цифр в имени только расширения.
Пример Моторокер'а удалит первую примыкающую к началу файла нецифровую последовательность, так же убив имена файлов без цифр.
Ещё раз повторю, что для приведённых примеров имён регекспы сработают правильно, но стоило бы составить более безопасное регулярное выражение.

#40:  Author: Tol!kLocation: Арзамас PostPosted: Thu Dec 03, 2009 00:44
    —
Lev, всё раскритиковал, и ничего не предложил взамен :)
Вахмурка
Самый безопасный вариант, вроде бы, такой (получен из варианта Rodny, как из наиболее безопасного из предложеных)
Найти: ^(\D+)(\d+\..+)
Заменить: $2
=
Найти: ^\D+(\d+\..+)
Заменить: $1

#41:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Thu Dec 03, 2009 12:10
    —
2Lev
Вот такого, как ты, я и имел в виду: ты не только можешь составить рег. выр-е, не только разобрать имеющееся, но и сделать выводы о его "безопасности", "универсальности" и т.д. Мне это пока недоступно (а учитывая то, как редко я ими пользуюсь, таковым и останется). Может, возьмешься? Если мой пример не покажется тебе примитивным, включи его. И вообще поиском по форуму можно много полезного найти. Причем если в интернете есть многое, посвященное рег. выр-ям как таковым, вообще, то здесь следует сосредоточиться на рег. выр-ях в именах файлов (пока бог с ним, с текстом). Постоянно мелькают примеры и вопросы: заменить латинское "с" на русское, " " на "_", и т.д.

#42:  Author: RodnyLocation: Могилёв, Беларусь PostPosted: Thu Dec 03, 2009 15:28
    —
Не делайте из еды^Wрегэкспов культа Smile
Универсальность и безопасность — это хорошо, вопросов нет. К этому надо стремиться.
Но чаще всего задачи имеют ряд дополнительных условий, исходя из которых уже и делается вывод о необходимости тех или иных мер.
Если задача разовая, на ограниченном наборе имён, то особого смысла её оптимизировать нету, имхо.
А если это пойдёт как образец для обучения, то тут уже другое отношение.

#43:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Thu Dec 03, 2009 15:55
    —
См. заголовок. "Knowledge Base - База знаний" - это что? Сборник готовых рецептов (читай - справочник), или учебник, дающий пищу для размышлений? По хорошему вопрос к D1P, как к автору всего этого безобразия. Мое мнение - на текущий момент скорее учебник, причем хорошо бы ей, базе, таковым и остаться. Следовательно, если Rodny или Lev на примере нескольких случаев изложат курс под рабочим названием "Регулярные выражения в ТС для продвинутых чайников", то "будет так хорошо-хорошо, ну прямо как при царе" ((С) старый анекдот).

#44:  Author: D1PLocation: Тбилиси PostPosted: Thu Dec 03, 2009 16:27
    —
Вахмурка wrote:
По хорошему вопрос к D1P, как к автору всего этого безобразия.

Это будет тем, чем вы это сделаете. Мне тоже ближе концепция учебника, но и готовые решения тоже приветствуются.

#45:  Author: Lev PostPosted: Thu Dec 03, 2009 17:39
    —
Имхо для начала вполне достаточно того, что есть в хелпе Тотала. К сожалению сайт автора реализации регулярных выражений использованных Гислером в Тотале линк на который есть в конце странички [s]умер[/s] у меня не открывается, но чего-то можно раскопать через web.archive.org - тут можно почитать чуть более расширенную информация, причём именно по тому движку, что использует Тотал. А тем кто желает продвинуться, я посоветовал бы почитать - Дж. Фридл "Регулярные выражения". Ну и wiki с остальным интернетом в помощь.

#46:  Author: JKTLocation: Харьков PostPosted: Sat Aug 06, 2011 22:00
    —
Уважаемые, подскажите пожалуйста рэгэксп
Есть имя файла "Имя Фамилия" (без кавычек) , надо переименовать "Фамилия Имя", - переставить слова (разделитель - пробел)
Спасибо

#47:  Author: MVVLocation: Ростов-Дон PostPosted: Sat Aug 06, 2011 23:47
    —
Как вариант, заменить ([^ \.]*) *([^ \.]*)(.*) на $2 $1$3 при установленных галке рег выражения и замены имени целиком (рядом). Предполагается, что имя и фамилия не содержат точек.

#48:  Author: AvadaLocation: Россия, Саратов PostPosted: Sun Aug 07, 2011 00:06
    —
JKT
Другой вариант (расширение обязательно есть, точка только перед ним):
Найти: (.*) (.*)\.
Заменить на: $2 $1\.

#49:  Author: Serge Yolkin PostPosted: Sun Aug 07, 2011 00:11
    —
Или (\S+)\s(\S+)(\..*)$ заменить на $2 $1$3, если пробел только один - между именем и фамилией (доллар в конце добавлен на случай, если все-таки не один, хоть ошибки не будет). А вообще-то, пример на тему "как поменять местами имя и фамилию" - чуть не на каждом сайте по регэкспам...

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

Кстати, есть довольно удобная весч для отладки регэкспов: http://regexpres.narod.ru/calculator.html Сам пользуюсь.

#50:  Author: JKTLocation: Харьков PostPosted: Sun Aug 07, 2011 02:23
    —
MVV
Спасибо!
Все работает!
Avada, Serge Yolkin , большой сенк за участие, другие варианты завтра попробую. Как попробую - отпишусь.
А вообще-то, может сделать отдельную ветку, где будут готовые решения по регэкспам, конкретные примеры? Как тут есть "обсуждения" . Тут обсуждения, а вдругой готовые?
Дело вдругом...... Рэгэкспы ТС и других прог могут по синтаксису отличаться. Я вот, например тэги аудиофайлов редакчу в mp3tag там малость синтаксис отличается. От потому и спросил и там и тут. Smile

P.S.
Вот мои пять копеек в копилку:
Имеем текст "ХХХХ - УУУУ" - Задача: оставить только ХХХХ (разделитель " - " (пробел-дефис-пробел) - часто встречается в тэгах аудио "артист - песня". Задача: оставить только "XXXX". Решение;

(.*?)\s+-.*
$1

#51:  Author: AvadaLocation: Россия, Саратов PostPosted: Sun Aug 07, 2011 08:01
    —
JKT wrote:
А вообще-то, может сделать отдельную ветку, где будут готовые решения по регэкспам, конкретные примеры? Как тут есть "обсуждения" . Тут обсуждения, а вдругой готовые?

В этой теме уже всё вперемешку, такой она, увы, и останется. Сама по себе мысль о разделении здравая, но у нас на разных подфорумах много чего предлагалось разделять, так что будет какая-то очерёдность обсуждения и реализации. Пока предложение принято к сведению.

#52:  Author: Olaf PostPosted: Sat Dec 15, 2012 15:51
    —
Здравствуйте, мне требуется помощь в такой проблеме: нужно использовать подстановочные символы в качестве шаблона для выделения/фильтрации файлов.
Есть папка с файлами, из которых мне нужно выделить
1) те, которые начинаются на 4 цифры, после которых идёт пробел или буква и пробел (например "1234 1234.1st" и "1234b 1234 1234.1st")
2) те, которые начинаются с 5 и более цифр.
пока что я застрял на первом же пункте Confused
пытаюсь написать "\b\d{4}? .", но при этом у меня выделяются и те файлы, которые содержат в себе фрагмент, отделённый пробелом, после которой идёт искомая часть (например файл "abcd 1234 1234.1st")
Что я не так делаю? Как это сделать правильно? Заранее благодарен

#53:  Author: RodnyLocation: Могилёв, Беларусь PostPosted: Sat Dec 15, 2012 16:15
    —
Буквы только латинские?
1) Найти: ^\d{4}[a-zA-Z]?\s
2) Найти: ^\d{5,}

#54:  Author: Olaf PostPosted: Sat Dec 15, 2012 21:03
    —
Rodny, да, так всё работает, спасибо огромное!
upd: а как сделать наоборот - показывать все файлы, кроме этих двух типов?

#55:  Author: AvadaLocation: Россия, Саратов PostPosted: Sat Dec 15, 2012 22:05
    —
C учётом реального содержания этой темы она переносится из "Секретов и советов" в "Общие вопросы". Справочник по регэкспам тут, увы, не получился...

#56:  Author: RodnyLocation: Могилёв, Беларусь PostPosted: Sun Dec 16, 2012 12:57
    —
Olaf wrote:
а как сделать наоборот - показывать все файлы, кроме этих двух типов?

Что-то типа: ^([^0-9]{4}[^a-zA-Z]?\S|[^0-9]{5,}).+

#57:  Author: Olaf PostPosted: Sun Dec 16, 2012 13:48
    —
Rodny, буду пробовать, спасибо ещё раз!

#58:  Author: Strek PostPosted: Sat Mar 23, 2013 06:21
    —
Как искать ссылки http и https?

#59:  Author: RodnyLocation: Могилёв, Беларусь PostPosted: Sat Mar 23, 2013 13:38
    —
Где? В принципе, найти: "https?://" и т.д.

#60:  Author: Strek PostPosted: Sat Mar 23, 2013 16:20
    —
Rodny wrote:
Где? В принципе, найти: "https?://" и т.д.

В текстовых файлах

#61:  Author: RodnyLocation: Могилёв, Беларусь PostPosted: Sat Mar 23, 2013 21:32
    —
Например, найти: https?://[^\s"':]+
В скобки добавить всё, чего ещё в ссылке быть не может.

#62:  Author: AvadaLocation: Россия, Саратов PostPosted: Sat May 18, 2013 09:09
    —
Последующая дискуссия об изменении регистра в разных частях имени с помощью инструментария ИГП в текущую тему не вписывается и переносится в тему по ИГП в "Общих вопросах".

#63:  Author: hawk777 PostPosted: Thu Jun 12, 2014 02:04
    —
Блин. на фтп надо найти все файлы где есть хоть одна заглавная буква и перевести в строчный вариант.
Использую поиск с плагинами с запросом такого вида: плагин -> tc, свойство -> имя, операция -> рег. выражение, значение -> (?-i)[A-Z]
Выводит все файлы в каталоге (и с прописными буквами, чего быть не должно). Вопрос: как правильно применять модификаторы?

#64:  Author: CaptainFlintLocation: Москва PostPosted: Thu Jun 12, 2014 02:51
    —
hawk777
Информационные плагины на FTP не поддерживаются, поэтому этот критерий просто игнорируется. В данном случае можно использовать регулярные выражения для поля "Искать файлы" на странице "Общие параметры".

#65:  Author: hawk777 PostPosted: Thu Jun 12, 2014 09:54
    —
CaptainFlint, спасибо. Только заметил галочку рег.выражений, теперь все ок Smile

#66: Регулярные выражения Author: pcherevin PostPosted: Mon Jan 30, 2017 15:56
    —
Подскажите пожалуйста, как правильно составить регулярное выражение в поиске содержимого текстового файла:
Строка находится между кавычками в выражении function="". Например function="СТРОКА".
Нужно найти в такой строке знак ";".

Искомый текст:
Quote:
ыаываыв ываа аыв ыва ываываываываыв ываываыва ываыв
function="парампампам-раттрарр"
лвоашщ вшща шщашщвыо а ыввыоа шщоащыоваш
function="парампампам;раттрарр"
оа щшывшщао ыщвша щ шывшщао ывщшаоывщш
function="парампампам=раттрарр"
щ пващзпщ звпзщваш зщвашпщ звазп зващ

#67:  Author: Aquila PostPosted: Mon Jan 30, 2017 16:22
    —
pcherevin
Попробуй:
Code:
(?<=^function=".*);(?=.*")

#68:  Author: pcherevin PostPosted: Tue Jan 31, 2017 14:27
    —
Aquila
Спасибо.

К сожалению TC не работает с такими регулярками.

P/S/
вроде заработало:
(function=")[^"]*;(")

#69:  Author: AvadaLocation: Россия, Саратов PostPosted: Tue Jan 31, 2017 14:45
    —
pcherevin
Оверквотинг (включая совершенно ненужное цитирование предыдущего поста) на форуме запрещён. Лишнее убрано.

#70:  Author: mxup PostPosted: Mon Mar 06, 2017 22:53
    —
Подскажите пожалуйста регулярное выражение для поиска файлов, содержащих строку, в которой содержаться одновременно слово "POST" и "200"
Хочу в общем найти логи Web Сервера Apache, где был удачный POST

Ну вот я как то так вижу это выражение только не регулярное, а как будто я делаю поиск по файлам: *POST*200*
Только это выражение подходит для поиска названия файлов которые содержать слова POST и 200
А мне нужно чтобы шёл поиск в тексте файлов

#71:  Author: Aquila PostPosted: Mon Mar 06, 2017 23:24
    —
^.*POST.*200.*$

#72:  Author: mxup PostPosted: Mon Mar 06, 2017 23:46
    —
Aquila wrote:
^.*POST.*200.*$

Спасибо!)

#73:  Author: NordicSagaLocation: Камчатка PostPosted: Fri Apr 07, 2017 02:43
    —
Здравствуйте.
Как должно выглядеть регулярное выражение для одновременного поиска в двух разных директориях всех папок с частично совпадающими наименованиями?
Причем, имена папок обязательно совпадают только в пределах, начиная с первого символа в строке и заканчивая неизменным набором символов - "нижнее подчеркивание", "год", "пробел", "тире", "пробел".

Например, нужно, чтобы TC за раз нашел папки-дубликаты муз. альбомов:
G:\LL\Katatonia_2009 - Night Is The New Day
G:\LL\Katatonia_2009 - Night Is... [Limited Edition, Digibook]
G:\MP3\Katatonia_2009 - Night is the new day (LP)
G:\LL\Napalm Death_2015 - Apex Predator - Easy Meat [Japanesse Edition]
G:\MP3\Napalm Death_2015 - Apex Predator - Easy Meat
...

#74:  Author: FlasherLocation: Москва PostPosted: Fri Apr 07, 2017 03:41
    —
'^(Katatonia|Napalm Death)_\d{4} - '

#75:  Author: NordicSagaLocation: Камчатка PostPosted: Fri Apr 07, 2017 03:50
    —
Спасибо. Но, я имел в виду иное.
В моей базе сотни наименований исполнителей. И всех их вводить в строку поиска просто нереально.

Как сделать так, чтобы ТС за раз искал в двух разных директориях (G:\LL\ и G:\MP3\):

1) все альбомы-дубликаты всех имеющихся в базе исполнителей?

2) все альбомы всех имеющихся в базе исполнителей, у которых нет дубликатов?

#76:  Author: FlasherLocation: Москва PostPosted: Fri Apr 07, 2017 04:13
    —
NordicSaga
А какие проблемы с поиском в разных папках? Выделить их перед поиском проблема?
Что вкладывается в понятие дубликат в отношении каталогов?

#77:  Author: NordicSagaLocation: Камчатка PostPosted: Fri Apr 07, 2017 04:37
    —
Хорошо. Попытаюсь объяснить свою проблему.

Храню свою фонотеку на одном диске в двух разных папках.
В папке "LL" находится несжатая музыка (т.н. lossless).
В папке "MP3" - соответственно альбомы с MP3-записями.

Периодически возникает необходимость найти и отобразить в TC (например, с целью последующего редактирования имен) перечень всех одних и тех же альбомов (папок), которые имеются как в директории "LL", та и в директории "MP3".
Например, в директории "MP3" есть папка-альбом "Metallica_1986 - ... ", а в директории "LL" имеются две почти такие же папки-альбомы: "Metallica_1986 - ... [1986 US]" и "Metallica_1986 - ... [1990 DE]", а также еще несколько сотен альбомов с частично совпадающими наименованиями папок, в которых они хранятся .

Или же наоборот. Иногда нужно отобразить только те альбомы (папки), у которых нет папок-дубликатов в одной из этих двух директорий.
Например, нужно отсортировать и вывести на панель просмотра альбомы, хранящиеся в директории "MP3", у которых нет дубликатов в директории "LL".

-----------
Дубликат папки - папка, наименование которой частично совпадает с наименованием другой папки. Содержимое таких папок всегда разное.
В моем случае всегда в наименовании папок-дубликатов совпадают символы, начиная с первого и заканчивая комбинацией: "нижние подчеркивание", "год", "пробел", "тире", "пробел".


Last edited by NordicSaga on Fri Apr 07, 2017 07:02; edited 1 time in total

#78:  Author: FlasherLocation: Москва PostPosted: Fri Apr 07, 2017 05:21
    —
В TС9+ после выделения папок MP3 и LL с вызовом диалога отмечаем Everything.
Перед запуском пишем ev:folder:dupe:regex:^\w+_\d{4}\s-\s в "Искать файлы:".
Чтобы искать одиночные папки, перед dupe нужно ! поставить. Синтаксис тут.

#79:  Author: NordicSagaLocation: Камчатка PostPosted: Fri Apr 07, 2017 07:31
    —
Спасибо.
Что такое "TC9+"? Какая-то версия Total Commander?

#80:  Author: AvadaLocation: Россия, Саратов PostPosted: Fri Apr 07, 2017 08:28
    —
NordicSaga
9.0 и выше. Стандартное обозначение.

#81:  Author: NordicSagaLocation: Камчатка PostPosted: Fri Apr 07, 2017 09:03
    —
Avada
Вас понял.

Flasher
Поставил TC9 и Everything 1.3.4.686.
Сделал далее так, как вы написали.
Результат - ничего не найдено.

Картинка


Last edited by NordicSaga on Fri Apr 07, 2017 10:01; edited 1 time in total

#82:  Author: AvadaLocation: Россия, Саратов PostPosted: Fri Apr 07, 2017 09:23
    —
NordicSaga
Замечание за нарушение правил форума. Неформатная картинка (вдобавок абсолютно ненужная) заменена ссылкой.

#83:  Author: NordicSagaLocation: Камчатка PostPosted: Fri Apr 07, 2017 09:24
    —
Прошу прощения.

#84:  Author: FlasherLocation: Москва PostPosted: Fri Apr 07, 2017 14:16
    —
NordicSaga
А где выделение каталогов, о котором я писал? Без выделения будет искать по всем дискам.
Строку лучше так записать: ev:folder:dupe:regex:^[.\s\wА-я]+?\S_\d{4}\s-\s.+
Но хочу заметить, что без указания конкретных символов спереди назвать это поиском "дубликатов" язык не повернётся. Сортировка, конечно, будет (хотя её и так потом в панели можно сделать), но в общий лист попадут совпадения по выражению, а не группами как, например, при поиске дубликатов файлов инструментом ТС на второй вкладке (хотя и там это не поможет с появлением поддержки каталогов). Пользу по сравнению с обычным поиском по выражению можно увидеть разве что в упомянутом !.


Last edited by Flasher on Sat Apr 08, 2017 06:58; edited 1 time in total

#85:  Author: NordicSagaLocation: Камчатка PostPosted: Sat Apr 08, 2017 02:11
    —
Выделил только нужные каталоги. Попробовал оба варианта поискового запроса - ничего не найдено.
Прям беда какая-то

#86:  Author: FlasherLocation: Москва PostPosted: Sat Apr 08, 2017 03:31
    —
Так я же написал, что можно использовать только выражение или добавить !.

#87:  Author: NordicSagaLocation: Камчатка PostPosted: Sat Apr 08, 2017 05:29
    —
Что значит "использовать только выражение"? Какое? Где? Как?
Этот знак ! я также добавлял перед словом dupe. Всё безрезультатно, хотя делал, как вы указали выше.
Если не трудно, поясните еще раз, что да как, для особо одаренного.

Задачи прежние.
Отсортировать по наименованию в каталогах MP3 и LL и показать на панели все папки (папки-аналоги), у которых первые части наименований* :
1) полностью совпадают друг с другом.
2) полностью или частично не совпадают.
-------------
* Первая часть наименования папки - любой набор символов, начинающийся с самого первого и заканчивающийся комбинацией: "нижние подчеркивание", "год", "пробел", "тире", "пробел".

Примеры папок-аналогов (по наименованию), хранящихся в разных каталогах:
G:\LL\Metallica_1986 - Master Of Puppets [1986 JP] [FPR]
G:\LL\Metallica_1986 - Master Of Puppets [1986 US]
G:\LL\Metallica_1986 - Master Of Puppets [1986 W.Germany for US] [FPR]
G:\MP3\Metallica_1986 - Master Of Puppets
Первые (полностью совпадающие друг с другом) части наименований папок-аналогов выделены жирным шрифтом, вторые (отличные друг от друга) части - красным цветом.

#88:  Author: FlasherLocation: Москва PostPosted: Sat Apr 08, 2017 07:10
    —
Пояснил же, что вывод групповых совпадений возможен только при указании совокупности конкретных начальных символов, а не некого множества в заданном диапазоне.
Т.е. в вашем случае ("всех их вводить в строку поиска просто нереально") это недостижимо, и вывод возможен только общим списком.
Создал точно такие же каталоги, отметил атрибут Каталог и при поиске только по выражению ^[.\s\wА-я]+\S_\d{4}\s-\s.+ нашёл нужное.
Похожий случай будет и с ev:folder:regex:^[.\s\wА-я]+\S_\d{4}\s-\s.+. Об этом шла речь.
Отсортировать по имени - не проблема, далее уже ручная работа с отсевом одиночников, запоминанием выделения, инверсией и т.д.

#89:  Author: NordicSagaLocation: Камчатка PostPosted: Sat Apr 08, 2017 07:39
    —
Правильно ли я делаю?
1) Выделяю в панели сразу две папки (LL и MP3).
2) Открываю в меню "Поиск файлов".
3) В окошко "Искать файлы" вставляю одно из выражений: "^[.\s\wА-я]+?\S_\d{4}\s-\s.+" или "ev:folder:!dupe:regex:^[.\s\wА-я]+\S_\d{4}\s-\s.+".
4) Ставлю галочку у надписи "Everything".
5) Нажимаю кнопку "Начать поиск" и жду результаты.
Если всё так, то мой TC ничего не находит. По-моему, даже вообще не пытается ничего искать. Сразу пишет: "Искомые файлы не найдены".

#90:  Author: FlasherLocation: Москва PostPosted: Sat Apr 08, 2017 13:13
    —
3) В одном случае ставится атрибут и флаг "Рег. выраж.", в другом нет.
Сам я пользуюсь последней бетой Everything.
4) После установки флага, значок программы должен отображаться в области уведомлений.

#91:  Author: NordicSagaLocation: Камчатка PostPosted: Sun Apr 09, 2017 06:07
    —
4) После установки флага, значок программы должен отображаться в области уведомлений.
После установки EverythingА он у меня всё время отображается в нижнем левом углу монитора. Это нормально?
Поставил тоже бету-Everything. Результатов нет.
По первому выражению почему-то находит буквально все папки, имеющиеся как в каталоге MP3, так и в LL. В этом случае я предварительно ставил галочки рядом со словами "Рег, выраж." и "Everything").
По второму выражению вообще ничего не ищет.

#92:  Author: FlasherLocation: Москва PostPosted: Sun Apr 09, 2017 07:01
    —
Выражение тут одно, записи разные. Все папки по нему не могут находиться. Это не '.*'.
Скрины: 1, 2.

NordicSaga wrote:
в нижнем левом углу монитора. Это нормально?
В левом? Или всё же в правом (в области уведомлений, что, естественно, нормально)?

#93:  Author: Liven' PostPosted: Sun Apr 09, 2017 17:45
    —
Есть много файлов с именем типа filename - 001 еще чего-то.mp4...filename - 999 еще чего-то.mp4
из них нужно найти файлы в которых есть например:
filename - 323
filename - 324
filename - 325
filename - 555
filename - 556
filename - 770
filename - 852

#94:  Author: FlasherLocation: Москва PostPosted: Sun Apr 09, 2017 18:11
    —
^filename - \d{3}.+\.mp4$

#95:  Author: Liven' PostPosted: Sun Apr 09, 2017 18:34
    —
Flasher wrote:
^filename - \d{3}.+\.mp4$

а в каком месте и как правильно перечислить цифры?

#96:  Author: Aquila PostPosted: Sun Apr 09, 2017 19:06
    —
Liven'

\d{3} - любые 3 цифры

#97:  Author: FlasherLocation: Москва PostPosted: Sun Apr 09, 2017 19:23
    —
Liven' wrote:
как правильно перечислить цифры?
Т.е. указанные? (32[345]|55[56]|770|852) вместо \d{3}.

#98:  Author: Liven' PostPosted: Sun Apr 09, 2017 19:33
    —
Aquila wrote:
Liven'

\d{3} - любые 3 цифры

Я так и подумал, попробовал так
^filename - \d{323,325,555,556,770,852}.+\.mp4$
не находит
одну цифру тоже
^filename - \d{323}.+\.mp4$
не находит

#99:  Author: Aquila PostPosted: Sun Apr 09, 2017 19:42
    —
Liven'

\d{323} - 323 любые цифры Very Happy
в фигурных скобках - число повторений, Вам уже ответили, я просто неправильно понял Ваш вопрос, сорри

https://msdn.microsoft.com/ru-ru/library/az24scfc(v=vs.110).aspx


Last edited by Aquila on Sun Apr 09, 2017 20:25; edited 1 time in total

#100:  Author: Liven' PostPosted: Sun Apr 09, 2017 20:19
    —
Спасибо всем за помощь такой вариант то что нужно
filename - (32[345]|55[56]|770|852)+\.mp4$

#101:  Author: FlasherLocation: Москва PostPosted: Sun Apr 09, 2017 20:38
    —
Точка перед плюсом пропущена.

P.S. Мир замер в ожидании всыпки за форменный чатофигизм... ©

#102:  Author: AvadaLocation: Россия, Саратов PostPosted: Sun Apr 09, 2017 21:39
    —
Liven'
1. Замечание за нарушение правил форума. Отучайтесь от дурных манер, здесь этого очень не любят.
2. Апостроф в конце ника создаёт проблемы как минимум при его копировании/вставке средствами форума. Вы уверены, что это архитектурное излишество вам жизненно необходимо? Если нет, свяжитесь с админом (CaptainFlint) на предмет правки.

Aquila
См. пункт 1 этого сообщения. Замечание за то же самое.

#103:  Author: NordicSagaLocation: Камчатка PostPosted: Mon Apr 10, 2017 06:21
    —
Flasher wrote:
Выражение тут одно, записи разные. Все папки по нему не могут находиться. Это не '.*'.
Скрины: 1, 2.

Посмотрел ваши скины и удивился.
На первом скине в результатах поиска почему-то вместе с другими отобразилась папка
D:\LL\Me_tallica_1986 - Master Of Puppets [1986 W.Germany for US] [FPR],
первая часть наименования которой (Me_tallica_1986 - ) не совпадает с первыми частями наименований (Metallica_1986 - ) всех остальных найденных папок.
На втором скине присутствует точно такой же перечень найденных папок.
Это как? Ничего не понимаю...

Было бы то, что нужно, если бы поиск:
В первом случае показал бы только три папки (первые части наименований которых полностью идентичны друг другу):
D:\LL\Metallica_1986 - Master Of Puppets [1986 JP] [FPR],
D:\LL\Metallica_1986 - Master Of Puppets [1986 US],
D:\MP3\Metallica_1986 - Master Of Puppets,
исключив из результатов папку
D:\LL\Me_tallica_1986 - Master Of Puppets [1986 W.Germany for US] [FPR],
поскольку первая часть её наименования отлична от первых частей наименований вышеуказанных трёх папок.
Во втором случае отобразил бы только одну папку
D:\LL\Me_tallica_1986 - Master Of Puppets [1986 W.Germany for US] [FPR],
не являющуюся аналогом остальным трём папкам по первой части своего наименования.


Flasher wrote:
В левом? Или всё же в правом (в области уведомлений, что, естественно, нормально)?

Виноват. В правом, конечно.


Last edited by NordicSaga on Mon Apr 10, 2017 06:48; edited 1 time in total

#104:  Author: FlasherLocation: Москва PostPosted: Mon Apr 10, 2017 06:48
    —
Я так понял, что мои объяснения вы проигнорировали. Тогда мне сюда больше нечего добавить. По 10 раз объяснять одно и то же мне неинтересно.

#105:  Author: AvadaLocation: Россия, Саратов PostPosted: Mon Apr 10, 2017 06:49
    —
NordicSaga
Не скины, а скрины. Разницу, надеюсь, объяснять не надо.

#106:  Author: NordicSagaLocation: Камчатка PostPosted: Mon Apr 10, 2017 07:03
    —
Нет, не надо.

Мне бы хотелось, чтобы дали ответ на поставленный вопрос простым понятным языком, желательно с примерами и скринами. Сам я не смогу разобраться в премудростях составления таких поисковых запросов. Или этот форум только для профессиональных пользователей с соответствующей подготовкой?

#107:  Author: FlasherLocation: Москва PostPosted: Mon Apr 10, 2017 07:07
    —
Мои разъяснения касались совсем не составления регулярных выражений, и никакие примеры для этого не требуются.

#108:  Author: NordicSagaLocation: Камчатка PostPosted: Mon Apr 10, 2017 07:10
    —
Хорошо, еще раз все перечитаю.
Спасибо.

#109:  Author: sa PostPosted: Wed Apr 12, 2017 14:48
    —
NordicSaga
Поскольку TC ищет дубликаты среди файлов, а не каталогов, то можно попробовать решить задачу, создав во временной папке (в примере это C:\Temp) каталоги LL и MP3, в которых вместо папок будут расположены файлы с такими же именами. Я воспользовался для этой цели тем, что оказалось под рукой – плагином DiskDir Extended. Операция упаковки файлов (Alt+F5) с помощью этого архиваторного плагина позволила без труда решить задачу трансформации имён папок в имена файлов.
Для поиска дубликатов по началу названий альбомов можно использовать, например, Script Content Plugin.
В папке плагина создать файл albom.vbs:
Code:
Set RegEx = New RegExp
RegEx.Pattern = "(^.+_\d{4} - ).+"
Content = RegEx.Replace(FileName, "$1")
Настроить ini-файл плагина:
Code:
[Script]
Section=albom
[albom]
LongName=0
ParseDirs=1
Script=albom.vbs
В поиске файлов (Alt+F7) на вкладке Дополнительно в поле по данным плагинов: указать [=script.Result]. После вывода файлов на панель удобно пользоваться диалогом выделения дубликатов (Num +). Приведённое на скрине выделение файлов в правой панели можно получить с помощью команд cm_CopyNamesToClip (копировать имена файлов в буфер) в панели с результатами поиска и cm_LoadSelectionFromClip (загрузить выделение из буфера) в папке LL.

#110:  Author: NordicSagaLocation: Камчатка PostPosted: Thu Apr 13, 2017 01:54
    —
sa, спасибо. Обязательно попробую ваш вариант, как только появится время.

#111:  Author: Baltazar PostPosted: Thu May 04, 2017 05:46
    —
Не знаю насколько в тему (если написал не туда перенесите), но решил отписаться здесь.

Недавно возникла ситуация, когда надо было найти файлы без расширений, мне в этом помогла регулярка ^([^.]+)$ . Возможно кому-нибудь пригодится Smile

Если есть лучшее решение данной проблемы - напишите, возьму на вооружение.

#112:  Author: FlasherLocation: Москва PostPosted: Thu May 04, 2017 10:12
    —
Baltazar
Не нужны тут регулярки: *.
И, кстати, круглые скобки в выражении лишние. Атрибут "Каталог", естественно, должен быть снят.

#113:  Author: sa PostPosted: Thu May 04, 2017 16:01
    —
Baltazar
Если вовсе без поиска (как вариант, в виде без подкаталогов), то установить в файловой панели сортировку по типу и/или нажать Alt+Num+ на файле без расширения.

#114:  Author: Baltazar PostPosted: Sat May 06, 2017 08:09
    —
Flasher, действительно, это работает, спасибо.

p.s. С тем что скобки лишние - согласен Wink

sa, имхо это не самыйл лучший вариант, если файлов пара десятков тысяч.

#115:  Author: AvadaLocation: Россия, Саратов PostPosted: Sat May 06, 2017 10:33
    —
Baltazar
Правила форума надо соблюдать постоянно, а не от случая к случаю.

#116:  Author: mr_aleksLocation: Minsk PostPosted: Fri May 12, 2017 05:06
    —
Возможно не туда напишу.
Вопрос, как в строке вида
Quote:
cd \\server\share /user:admin

задать еще и пароль? я понимаю, что это не безопасно, но это лишь для себя
В справке сказано:
Quote:
С помощью параметра /user: (в нижнем регистре!) можно задать логин/пароль для соединения с сетевым каталогом.
Пример: cd \\сервер\каталог /user:имя_пользователя

Как это сделать?

#117:  Author: AvadaLocation: Россия, Саратов PostPosted: Fri May 12, 2017 07:15
    —
mr_aleks
Во-первых, эта цитата не из справки, а, насколько понимаю, отсюда. Там неточность, которая в дальнейшем при переработке таблиц была устранена (но более новая версия этой странички пока не выложена): в команде указывается только логин, пароль вводится потом вручную.
Во-вторых, в том, что это лютый оффтоп, не имеющий к теме вообще никакого отношения, не должно быть никаких сомнений. Что делать, если вы не знаете, куда писать, в правилах сказано. Замечание за нарушение правил форума (далеко не первое).

#118:  Author: videoDVDkhv PostPosted: Mon Jun 05, 2017 08:51
    —
Не могу найти записанный на своем компе лицензионный ключ вида DGBMHUFPHEE-9188. Как записать ЭТО в виде регулярных выражений и попробовать найти в Total Commander?

#119:  Author: FlasherLocation: Москва PostPosted: Mon Jun 05, 2017 10:15
    —
videoDVDkhv
[A-Z]{11}-\d{4}

#120:  Author: Ostap Fender PostPosted: Mon Dec 11, 2017 17:11
    —
Помогите пожалуйста с регулярными выражениями для группового переименования.
1. Начало слов с заглавной, не изменяя слова, в которых минимум 2 заглавных буквы находятся рядом.
(понимаю, что в данном условии есть свои "подводные камни", но в 90% случаев для моих нужд условие подходящее).
Примеры:
WWW putin FX переименовать в WWW Putin FX.
tramp uRod (EE) переименовать в Tramp Urod (EE).
2. Убрать в названии все символы, находящиеся до символа, расположенного после первого пробела (включая и сам пробел(пробелы, если их несколько) не пытаясь изменить названия файлов, в которых первый пробел стоит перед точкой, разделяющей имя и расширение файла - чтобы не вылезло предупреждение.
Пример:
"123аре ллл.тхт" переименовать в "ллл.тхт".
"ук_3ук ууу.wav" переименовать в "ууу.wav".
"еее .ехе" - не пытаться изменить.
Поиск.
Что указать в маске поиска, чтобы найти файлы и папки, в названии которых содержатся запрещённые символы для именования файлов Windows. (такое встречается в архивах .NKX - подробности опустим).

#121:  Author: FlasherLocation: Москва PostPosted: Mon Dec 11, 2017 20:35
    —
Ostap Fender
1. См. опцию "Верхний/нижний регистр".
2. Найти: ^[^\s]*\s+
3. [?|:"<>/*\\]


Last edited by Flasher on Wed Dec 13, 2017 02:40; edited 2 times in total

#122:  Author: Ostap Fender PostPosted: Tue Dec 12, 2017 16:42
    —
Flasher wrote:
1. Найти: ^[^\s]*\s+
2. [?:"<>/*\\]

1.На что заменить это? на "пусто"?
Был еще и второй вопрос по переименованию. Варианта нет? Или вопрос не понятно сформулирован?

#123:  Author: AvadaLocation: Россия, Саратов PostPosted: Tue Dec 12, 2017 16:49
    —
Ostap Fender
Нумерованных вопросов было два. Третий — это про запрещённые символы в имени файла в архиве? На него имею встречный вопрос: а в подобных архивах средствами TC вообще поиск выполняется?

#124:  Author: FlasherLocation: Москва PostPosted: Tue Dec 12, 2017 16:52
    —
Ostap Fender
Исправил пункты. Первый не увидел. В 2 — по умолчанию, <пусто>.

#125:  Author: Ostap Fender PostPosted: Tue Dec 12, 2017 21:41
    —
Avada wrote:

в подобных архивах средствами TC вообще поиск выполняется?
Да выполняется. (Данные архивы создаются с помощью плагина inNKX для ТС). В его описании указано следующее;
UNIX-имена файлов:
Имена файлов и каталогов в контейнерах, созданных на системах под управлением Mac OS, могут содержать запрещённые символы для именования файлов Windows ( \ ? * " | : < > ), поэтому извлечь файлы с такими именами невозможно. inNKX решает данную проблему с помощью управляющих последовательностей запрещённых символов.
Каждому запрещённому символу ставится в соответствие управляющая последовательность символов [в угловых скобках]:
\ [bslash] обратный слэш
? [qmark] знак вопроса
* [star] знак умножения
" [quote] двойная кавычка
| [pipe] вертикальная черта
: [colon] двоеточие
< [less] знак меньше
> [greater] знак больше
_ [space] пробел (только в конце имени)
. [dot] точка (только в конце имени)
При чтении файлов и каталогов контейнера в Total commander передаются имена, в которых все запрещённые символы заменены их управляющими последовательностями (3) . При извлечении на диск пользователь будет предупреждён о том, что имена файлов на диске и в контейнере различаются. При упаковке файла или каталога, имя которого содержит управляющие последовательности, будет выполнено обратное преобразование.

Начиная работу с архивом, созданным не мной, я должен знать, что этого хлама там нет.

#126:  Author: FlasherLocation: Москва PostPosted: Wed Dec 13, 2017 02:43
    —
Ostap Fender wrote:
_ [space] пробел (только в конце имени)
. [dot] точка (только в конце имени)
Тут нет запрета. _ используется в системных резервных cab-ах. А точка на конце просто игнорируется.
Ostap Fender wrote:
в угловых скобках
Вообще-то квадратных. Угловые выглядят так: ⟨ ⟩.

#127:  Author: BeardFury78 PostPosted: Tue Feb 06, 2018 12:46
    —
Негативные опережающие проверки не поддерживаются? Просто хочу найти файлы в Тотале вот этой регуляркой:
Code:
^(?!(tumblr_|\d\d\d\d\d\d+)).

В ответ выдает, что неверное имя файла. Если убрать ?!, то поиск идет, но результат, понятно, не тот, что нужен. Может есть альтернативная регулярка? Нужно найти все, что не содержит в начале несколько цифр или слова tumblr_.

#128:  Author: sa PostPosted: Tue Feb 06, 2018 13:08
    —
BeardFury78
А если использовать Поиск с плагинами на вкладке Плагины?
Плагин: tc
Свойство: Имя
Операция: !Рег.выраж.
Значение: tumblr_|\d\d\d\d\d\d+

#129:  Author: BeardFury78 PostPosted: Tue Feb 06, 2018 13:11
    —
sa
Ок, это решило задачу. Только в начале надо ставить ^ и потом скобку ( и скобку ) в конце.

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

Avada
Мне не нужно найти файлы, которые содержат от 6 цифр и больше в начале имени.

#130:  Author: AvadaLocation: Россия, Саратов PostPosted: Tue Feb 06, 2018 13:30
    —
BeardFury78
Я убрал своё сообщение, увидев, что ответ уже дан (хотя и с менее точным синтаксисом). А 6 и более цифр можно указать короче: ^(tumblr_|\d{6,})

#131:  Author: SaDim PostPosted: Sun Nov 24, 2019 22:34
    —
Помогите, пожалуйста.
Синтаксис (Регулярное выражение) для поиска номера телефона в файлах.
Номера телефонов может быть разных форматов xxxxxxx, xx-xx-xxx, xxx-xx-xx, xxx-xxxx, возможно и другие формы из цифр и "-" (мало вероятенно но возможно ещё пробелы).
Существует ли универсальный способ (поиск по части номера), типа задаешь только цифры а поиск идет игнорируя "-" и пробелы.
Спасибо.

#132:  Author: FlasherLocation: Москва PostPosted: Sun Nov 24, 2019 23:53
    —
SaDim wrote:
возможно и другие формы из цифр

(\d[- ]?){7}

#133:  Author: SaDim PostPosted: Mon Nov 25, 2019 00:51
    —
Flasher, я может не правильно выразился.
Имеется куча txt файлов с разным текстом и разными номером телефона в этом тексте.
Нужно найти файл с нужным телефоном даже по куску номера.
Пример файл с таким содержанием: привет тел. 123-54-76
Даю поиск 47 и нахожу этот файл, если файлов много с похожим номером, даю 547, или 476, если и так много то ищу 5476 ну и так далее.
Flasher
Огромное Спасибо за 1[- ]?2[- ]?3[- ]?5[- ]?4, который раз выручаете.


Last edited by SaDim on Mon Nov 25, 2019 18:06; edited 3 times in total

#134:  Author: FlasherLocation: Москва PostPosted: Mon Nov 25, 2019 01:01
    —
SaDim
Т.е. по части конкретного номера, а не шаблона (xxx наталкивает).
1[- ]?2[- ]?3[- ]?5[- ]?4

#135:  Author: CaptainFlintLocation: Москва PostPosted: Thu Nov 28, 2019 00:44
    —
 !  CaptainFlint:
SaDim
Пожалуйста, не отвечайте на следующий пост путём правки предыдущего. Это осложняет чтение для других участников.

#136:  Author: mitrichLocation: Белгород PostPosted: Mon Sep 28, 2020 15:50
    —
Подскажите, пожалуйста, как проще всего поставить точку после первых двух символов в названиях файлов?
То есть из "12Привет" получить "12.Привет"

#137:  Author: Aquila PostPosted: Mon Sep 28, 2020 16:54
    —
Search for: (..)
Replace with $1.

#138:  Author: AvadaLocation: Россия, Саратов PostPosted: Tue Sep 29, 2020 06:38
    —
mitrich
Проще всего в инструменте группового переименования без всяких регулярных выражений указать в поле для маски имени: [N1-2].[N3-]

#139:  Author: mitrichLocation: Белгород PostPosted: Tue Sep 29, 2020 11:01
    —
Aquila, Avada
Спасибо!! Да, я глубоко полез(

#140: Регулярное выражение для имени файла Author: N1Tron1X PostPosted: Tue Oct 27, 2020 13:09
    —
Нужно составить регулярное выражение для переименования файлов и папок следующего вида:

1. Папка
АБВГ.123456.789 Кабель питания
АБВГ.123456.789-01 Кабель питания
АБВГ.123456.789-001 Кабель питания
2. Файлы
АБВГ.123456.789_СБ Кабель питания.pdf
АБВГ.123456.789_СП Кабель питания.pdf
АБВГ.123456.789_ВП Кабель питания.pdf
АБВГ.123456.789-01_СБ Кабель питания.pdf
АБВГ.123456.789-01_СП Кабель питания.pdf
АБВГ.123456.789-01_ВП Кабель питания.pdf
АБВГ.123456.789-001_СБ Кабель питания.pdf
АБВГ.123456.789-001_СП Кабель питания.pdf
АБВГ.123456.789-001_ВП Кабель питания.pdf

Цель регулярного выражения - использование при групповом переименовании файлов для смены децимального номера, т.е. АБВГ.123456.789 --> ДЕЖЗ.234567.890.

Составил выражение
Code:
\W{4}\.\d{6}\.\d{3}
но оно работает только для файлов, а при попытке использовать его для папки не находит совпадений.

Если из выражения вырезать \.\d{3} , то совпадения находятся, но в имени папки остаётся .789.

Помогите составить универсальное регулярное выражение.

#141:  Author: AvadaLocation: Россия, Саратов PostPosted: Tue Oct 27, 2020 13:41
    —
N1Tron1X
Создавать для каждого запроса по регулярным выражениям отдельную тему — слишком большая роскошь. Пока что перенесено по принадлежности в общую тему по регуляркам. И не уверен, что папки/файлы тут единственнная проблема. Составленное вами выражение — это просто произвольный набор символов в общем виде, разбитых на группы точками. Удалить их, предположим, легко. Но менять их вы их с наращиванием букв и цифр на что-то другое как собираетесь?

#142:  Author: sa PostPosted: Tue Oct 27, 2020 14:58
    —
N1Tron1X wrote:
для папки не находит совпадений.

Может, в диалоге группового переименования, галка для [E] "Заменять также в расширениях файлов", напрасно убрана?

#143:  Author: N1Tron1X PostPosted: Tue Oct 27, 2020 17:53
    —
sa
Да, Вы правы! Не думал, что эта галка может сыграть роль при переименовании папок, которые не имеют расширения.

Рабочая регулярка, если кому понадобится
Code:
^\W{4}(.*)\d

*в имени файлов/папок не должно быть цифр после децимального номера

Спасибо!

#144:  Author: AvadaLocation: Россия, Саратов PostPosted: Tue Oct 27, 2020 18:23
    —
N1Tron1X
Во-первых, рабочая регулярка — для чего? При нормальном использовании в ИГП регулярные выражения позволяют вот именно что выполнять переименование от и до, ваши (что то, что другое) этого не делают. Кому и для чего она может понадобиться, не подскажете? Выше уже задавался вопрос, который вы успешно проигнорировали.
Во-вторых, извольте нормально оформлять цитаты: кнопкой "цитата" надо уметь пользоваться. Излишества убраны (в данном случае цитата вообще не нужна).
Что касается самого вопроса, то менять умолчальное состояние опций, не разобравшись как следует в их смысле, никогда не следует, а к расширению в папках приравнивается то, что идёт после последней точки.

#145:  Author: sa PostPosted: Tue Oct 27, 2020 19:48
    —
Avada wrote:
выполнять переименование от и до

Задача сводится к разовой замене децимального номера для группы файлов и папок: регулярка вводится в поле "Найти:", а новый децимальный номер в поле "Заменить на:".

#146:  Author: AvadaLocation: Россия, Саратов PostPosted: Tue Oct 27, 2020 21:14
    —
sa
Возможно, но если, согласно примеру, точный исходный децимальный номер меняется на точный другой номер, то так ли здесь необходимы регулярные выражения? Во всяком случае, из сообщённых условий другой трактовки ситуации не видно. И есть предложение дальше за автора запроса то, что ему надо, не придумывать. Захочет отвечать — сам ответит. Не захочет — его дело, тем более что исходная проблема с выключенной опцией исчерпана.

#147: Требуется РВ для группового переименования каталогов Author: ToniZa PostPosted: Wed Jul 14, 2021 19:27
    —
Условия:

Есть набор каталогов, созданных по одинаковому принципу: - Составление нескольких слов вместе, в слитное написание. Причем каждое слово начинается со Строчной буквы. Буквы могут применяться смешанные - как латиница, так и кириллица. Т.е название каталога может иметь (обобщенно!) следующий вид:

ProjectTypeАвторNoName. При этом длина названия (общее кол-во символов в названии) не регламентированно. Т.е условно может быть любым.

Задача - написать РВ, позволяющее переименовывать эти названия в следующий вид:

Project_Type_Автор_No_Name
Т.е - перед каждой Строчной буквой, должно появиться подчеркивание, НО - его не должно быть в конце названия и в начале, соответственно

#148:  Author: CaptainFlintLocation: Москва PostPosted: Wed Jul 14, 2021 23:14
    —
ToniZa
Регулярное выражение.
Найти: (?-i)\B[A-ZА-ЯЁ]
Заменить на: _$0

Побочный эффект: заменяться не будет не только в начале слова, а ещё и после пробела, но насколько я понял, в исходных именах пробелов всё равно нет.
Также непонятно, что имеется в виду под "в конце названия". Если подчёркивание добавляется лишь перед буквой, то оно в принципе не может оказаться в самом конце.

#149:  Author: ToniZa PostPosted: Thu Jul 15, 2021 12:08
    —
CaptainFlint wrote:
ToniZa
...насколько я понял, в исходных именах пробелов всё равно нет.

Да, правильно - нет.
Quote:
Если подчёркивание добавляется лишь перед буквой, то оно в принципе не может оказаться в самом конце.

Просто я пытался сам решить эту задачу и, судя по всему, заходил "не с той стороны". Вот и предупредил, "на всякий случай".

#150: Поиск-замена с регэксп. Author: zoog PostPosted: Sat Jan 22, 2022 17:05
    —
Привет.
Пытаюсь повторить простое действие из хэлпа: замену типа "автор - год - альбом - трэк" на "год автор".
(.*) - (.*) - (.*) - (.*) --- $2 $1
В простейшем случае, когда формат постоянен - работает, но если присутствует разное число полей - то всё рушится. Как я понял, нумерация полей произврдится с последнего, а мне надо перетасовать первые.
Это решаемо или багофича регэкспов?
Тиа.

#151:  Author: AvadaLocation: Россия, Саратов PostPosted: Sat Jan 22, 2022 19:53
    —
zoog
1. В справочном примере только два подвыражения меняются местами (причём с указанием расширения), так что ваше "простое действие" не оттуда.
2. Вопрос надо формулировать не с "типа", а точно. Каких полей не бывает? Третьего и/или четвёртого? Правильно ли я понял, что при любом варианте должны остаться только первые два поля с начала, переставленные местами и разделённые одним пробелом? Или нет? (Кстати, для переменного числа полей ваше выражение в любом случае не годилось бы уже потому, что все чёрточки за пределами скобок указаны как реальные символы в точном количестве три штуки.)
2. Для обсуждения регулярных выражений на форуме есть общие темы, и создание новых тем по каждому частному вопросу — явно не самая хорошая идея. Перенесено по принадлежности.

#152:  Author: sa PostPosted: Sat Jan 22, 2022 20:14
    —
zoog
Можно так попробовать искать, если задвоенный пробел в результате не смущает:
([^-]*) - ([^-]*)(.*)
От задвоения можно избавиться, добавив пробел после маски файла [N] и в выражении для поиска, перед (.*).

#153:  Author: AvadaLocation: Россия, Саратов PostPosted: Sun Jan 23, 2022 09:30
    —
sa
Да, с указанными поправками работает. (Если, как было сказано выше, техзадание понято правильно.)
Упомяну также для ясности про указание $2 $1 в поле "Заменить на", включение опции "Рег. выраж." и выключение опции [E].

#154:  Author: sa PostPosted: Sun Jan 23, 2022 11:03
    —
Avada wrote:
с указанными поправками работает.

К сожалению, не в случае, когда в полях "автор" и/или "год" присутствует тире…
Тут, как вариант, потребуется предварительный проход переименования с заменой тире в разделителе полей (пробел-тире-пробел) на какой-нибудь экзотический символ, которого заведомо нет в содержимом первых двух полей и правка выражения для поиска с заменой (в трёх местах) тире на этот символ.

#155:  Author: AvadaLocation: Россия, Саратов PostPosted: Sun Jan 23, 2022 17:51
    —
sa
Да, но в случае редких исключений можно и выполнить точечную правку. Кроме того, всё-таки в обсуждаемом виде это не тире, а дефис (чёрточка, минус, -). А тире бывает короткое (–) и длинное (—).

#156:  Author: zoog PostPosted: Wed Jan 26, 2022 00:32
    —
Avada, пардон что не отвечал - уведомления не сработали, видимо.
1) А какая разница, сколько полей? Всё, что больше 1го - логически монопенисуально, не? Если б нумерация шла с 1го - всё б у меня получилось.
2) У нас есть 3-4-возможно более полей (мне интересно решить общий случай), поменять первые 2-3, гарантированно присутствующие.
Quote:
для переменного числа полей ваше выражение в любом случае не годилось бы уже потому, что все чёрточки за пределами скобок указаны как реальные символы в точном количестве три штуки.

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

sa wrote:

Можно так попробовать искать, если задвоенный пробел в результате не смущает:
([^-]*) - ([^-]*)(.*)

Так, мы заменяем (всё, что угодно) на (любую последовательность символов без тире) - это типа упрощает логику поиска?
Спасибо)
Работает. Так проблема была не в том, что группы искались с конца имени?

#157:  Author: AvadaLocation: Россия, Саратов PostPosted: Wed Jan 26, 2022 11:15
    —
zoog
Не только в полях дело, а ещё и в чёрточках-разделителях между скобками, которых при вашей форме записи можно найти ровно столько, сколько было указано, а если их по факту меньше/больше, наперекосяк идёт вся операция. А что счёт подвыражений для поиска-замены (при правильном синтаксисе, естественно) идёт именно с начала, сказано в справке TC.
Поскольку рабочее решение вашей задачи дано, то обсуждать тут дальше, кто что имел в виду, особого смысла не вижу. Если очень интересно — читайте справку и экспериментируйте самостоятельно.

#158:  Author: zoog PostPosted: Wed Jan 26, 2022 15:08
    —
Avada,
Quote:
которых при вашей форме записи можно найти ровно столько, сколько было указано

Ну да, найти столько, остальные игнорировать. Разве не так программирование / обработка ошибок работает?)
Quote:
А что счёт подвыражений для поиска-замены (при правильном синтаксисе, естественно) идёт именно с начала, сказано в справке TC.

Счёт (порядок счёта) идёт с первого, но само первое поле (при числе полей, бОльшем указанного) выбирается не с начала, то есть при 3х полях в условии и 5 полях на входе считается не $1 $2 $3**, a **$1 $2 $3.
Ещё раз спасибо за помощь.

#159:  Author: AvadaLocation: Россия, Саратов PostPosted: Wed Jan 26, 2022 16:23
    —
Ваша исходная запись означала подвыражения для поиска-замены, разделённые ровно тремя безусловно присутcтвующими чёрточками, обрамлёнными пробелами. Поэтому никакое "остальные игнорировать" тут не прокатывает: часть имён просто не находится или интерпретируется неверно. Правильный синтаксис с упаковкой всего нужного в скобки был дан позже (со всеми уточнениями), и вот там действительно учитываются только первые два подвыражения (они меняются местами с убиранием лишних разделителей), а вся следующая часть имени игнорируется (ибо $3 для замены не указано).

#160:  Author: zoog PostPosted: Wed Jan 26, 2022 16:47
    —
Дошло. Нужно было дополнить (.*) - тогда обрабатывались бы лишь первые поля?

#161:  Author: AvadaLocation: Россия, Саратов PostPosted: Wed Jan 26, 2022 17:57
    —
zoog
Не только это, надо ещё нормально границы подвыражений указать и все пробелы соблюсти. Синтаксис правильного варианта проанализируйте как следует (к вашим услугам справочный раздел по регуляркам и материалы форума). В частности, ([^-]*) означает 0 или более любых символов, кроме чёрточки, а (.*) — 0 или более каких угодно символов. А чёрточка вне скобок стоит в единственном месте, где её действительно следовало указать. Дальше, если нужно, разбирайтесь самостоятельно.

#162:  Author: zoog PostPosted: Wed Jan 26, 2022 18:04
    —
Quote:
В частности, ([^-]*) означает 0 или более любых символов, кроме чёрточки, а (.*) — 0 или более каких угодно символов.

Ну да, в данном случае как раз последующие чёрточки нельзя учитывать. Только первые (поля).

#163:  Author: rexen PostPosted: Mon May 23, 2022 13:50
    —
Камрады, прошу помощи.
Рядовая проблема с очисткой имён файлов (скачиваемых роликов) от всякого мусора и лишних символов.
Меня устраивает простое регулярное выражение, удаляющее всё кроме букв и цифр:
Code:
[^\wА-Яа-яёЁ ]

^ - "кроме"
\w - латинские цифробуквы
А-Яа-яёЁ - кирилица
(пробелы оставляем)

НО!

После удаления, скажем, дефиса, обрамляющие его пробелы остаются - т.е. получается задваивание пробелов.
И я уже всю голову поломал и всякие варианты поперебирал, но не могу никак придумать, как это задваивание (затраивание...) удалять этим же проходом. Вот пройтись вторым разом по тем же файлам и отдельным выражением убрать все повторяющиеся пробелы - не проблема. А вот за один проход - подозреваю, никак. Или?

#164:  Author: sa PostPosted: Mon May 23, 2022 14:42
    —
rexen
Так не сработает?
Code:
[^\wА-Яа-яёЁ ]|[  ]

#165:  Author: rexen PostPosted: Mon May 23, 2022 20:48
    —
sa, нет, Ваша регулярка удаляет все пробелы подчистую.
Neutral
Я так задавать "двойной пробел" пробовал самыми разными способами.
Тут, видимо, причина не в том, чтобы извернуться и выдумать некое неординарное регулярное выражение, а в самом принципе, который никак кроме в 2 шага не реализовать:

1) УДАЛИТЬ все неалфавитные символы
2) ЗАМЕНИТЬ множественные пробелы ОДНИМ пробелом

Т.е. мало того, что это две разные операции - в первой всё найденное заменяется ничем, а во второй - одинарным пробелом, так ещё и после прохода первой операции появляются эти самые лишние пробелы. Я в регулярках не спец - не в курсе как они там внутри обрабатываются - можно ли вообще в принципе организовать двойной проход одним выражением. Как программист-junior пока сомневаюсь.

---

Разве что напихать некий массив-перечисление всевозможных комбинаций пробельных/неалфавитных символов с ЗАМЕНОЙ любой из них на один пробел. Но уж больно некрасивый выход, да и число комбинаций слишком большое - придётся оставлять только самые очевидные.

Потренироваться можно на вот таком примере:
Code:
01.  PODcast - прямой_эфир. Отвечаем , вопросы, комментарии (@17`05'2022).m4a

(здесь, кстати, по логике ещё и подчёркивание (и прочие разделяющие слова непробельные символы) надо бы пробелом заменить)

#166:  Author: likhoboryLocation: Москва PostPosted: Mon May 23, 2022 23:40
    —
Не программист, но любитель. Из опыта - чем проще регулярка, тем большего количества грабель можно избежать. В Вашем случае я бы предложил следующий PS-скрипт, в одной команде сначала удаляющий неалфавитные символы, а затем выполняющий необходимые замены:
Code:
ls $args[0] -Recurse|Rename-Item -NewName { $_.Name -replace '^\w\s' -replace '\s*-\s*|_', ' '  }


Last edited by likhobory on Tue May 24, 2022 20:04; edited 1 time in total

#167:  Author: Monarch-LFV PostPosted: Tue May 24, 2022 04:33
    —
rexen
Code:
\s*[^\wА-Яа-яёЁ ]

Удаляет образующиеся двойные пробелы (например, в сочетании " - "), но если в имени изначально были двойные пробелы, то не удалит.
А вообще, согласен с предыдущим оратором - если требуется много операций/хотелок/проходов, то проще скрипт сделать с несколькими строками по последовательным заменам. Только тогда получится сделать что-то адекватное.

#168:  Author: sa PostPosted: Tue May 24, 2022 10:56
    —
rexen wrote:
удаляет все пробелы подчистую

Да, поторопился: ошибочно принял удаление всех пробелов за ожидаемое мной – только задвоенных (а одиночных в моём примере не было).
Если говорить о нескольких проходах, то, начиная с версии TC 10.50, их можно выполнить одной кнопкой без каких-либо дополнительных нажатий. Например, использовать связку команд наподобие такой:
cm_SelectAllFiles,em_ren_1,cm_wait 0,cm_SelectAllFiles,em_ren_2
Здесь пользовательские команды (em_) имеют вид MULTIRENAME==имя_шаблона.

#169:  Author: Monarch-LFV PostPosted: Tue May 24, 2022 11:41
    —
rexen
Чтоб не оффтопить здесь, разместил в этой ветке скрипт VBS по вашим хотелкам.

#170:  Author: rexen PostPosted: Sat Dec 16, 2023 20:24
    —
Народ, кстати, "ЧатГопота" МОЖЕТ!
Решил сиё поделие OpenAI помучать моим вопросом - ну так он сразу мне почти идеальный регэксп выдал:
Code:
[^\wА-Яа-яёЁ]+| +
(там после плюса в конце ещё пробел обязателен - его почему-то не видно)

Я только внёс кириллицу в множество и Ё - ChatGPT проигнорил наш алфавит (культура отмены, штоль.. Confused )
в диалоге Тотала группового переименования - в поле "заменить" на один пробел
В итоге оно справляется и с образующимися дублями пробелов, но... кроме случая когда НЕнужный символ в самом конце строки - он его меняет на пробел и там и оставляет, хотя в идеале финализирующий пробел в имени файла - лишний.

Так что велкам: https://chat.openai.com/
(да, там целая проблема с доступом к сервису из наших "палестин", но решения есть - ищите и обрящете)

#171: Вариатор внутри регулярки Author: Rainbow-SpikeLocation: Амурская область, Циолковский PostPosted: Mon Sep 30, 2024 08:48
    —
Есть немного отличающиеся шаблоны для сжатия имён протоколов совещаний трёх типов

Протокол.+ № ?(\d+)-пр\.? от (\d+\.\d+\.\d+)( г\.)? Протокол оперативного совещания( от \d+\.\d+\.\d+( г\.)?)?
$2 ПрОС-$1

Протокол.+ № ?(\d+)-пр\.? от (\d+\.\d+\.\d+)( г\.)? Протокол служебного совещания( от \d+\.\d+\.\d+( г\.)?)?
$2 ПрСС-$1

Протокол.+ № ?(\d+)-пр\.? от (\d+\.\d+\.\d+)( г\.)? Протокол технического совещания( от \d+\.\d+\.\d+( ?г\.)?)?
$2 ПрТС-$1

А затем появилось обычное совещание

Протокол.+ № ?(\d+)-пр\.? от (\d+\.\d+\.\d+)( г\.)? Протокол совещания( от \d+\.\d+\.\d+( г\.)?)?
$2 ПрС-$1

Возможно ли как-то слить все эти шаблоны в один с условием, определяющим вставку буквы?

#172:  Author: Monarch-LFV PostPosted: Mon Sep 30, 2024 15:26
    —
Rainbow-Spike
Не совсем понятна постановка задачи, приведите примеры начального вида и того, что нужно получить. Судя, например, по вашей первой записи вижу для себя такой пример:
Code:
Протокол ffff № 225-пр. от 30.09.2024 г. Протокол оперативного совещания от 30.09.2024  г

Смущает, что в названии 2 раза "Протокол" и дата, так и должно быть?

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

Пока выстраивается такой вариант:
Code:
.*?№ ?(\d+).*?от ([\d+\.]+).*?Протокол (.)?.*?совещания.*
$2 Пр\U$3С-$1

Так?

#173:  Author: Rainbow-SpikeLocation: Амурская область, Циолковский PostPosted: Fri Oct 04, 2024 12:31
    —
да, там был протокол протокола

спасибо, регулярка работает. про флаг \U не знал...

а есть ли возможность вставлять на выбор в зависимости от стриггеренной группы в регекспе? ну то есть аналог функции if then else

перловские регекспы такое умеют, а может ли уметь ТК?

#174:  Author: Monarch-LFV PostPosted: Fri Oct 04, 2024 13:09
    —
Rainbow-Spike
Нет, TC не поддерживает при переименовании условия. Это нужно писать скрипт, например на VBS. А чем вас не устраивает предложенный мной вариант? Имя формируется по первой букве.

#175:  Author: Rainbow-SpikeLocation: Амурская область, Циолковский PostPosted: Sat Oct 05, 2024 20:15
    —
Устраивает, я просто про запас спросил, для экономии размера списка шаблонов. Жаль, что условия не поддерживаются

#176:  Author: rexen PostPosted: Mon Nov 04, 2024 22:17
    —
Нигде не могу найти чёткое и внятное пояснение, какой всё-таки стандарт регулярок реализован в TRegExpr. Упрощённый POSIX? Где наиболее полная справка по поддерживаемым выражениям?

Ни во встроенной справке Тотала, ни на сайте Гхислера: https://www.ghisler.ch/wiki/index.php/Regular_Expressions не упоминаются "просмотры вперёд или назад". Хотя по факту инструмент группового переименования как-то их воспринимает в конструкции выражения.

На сайте Сорокина, автора библиотеки, лежащей в основе работы Тотала с регулярками, заявлена полноценная работа и с lookahead assertion и с lookbehind assertion: https://regex.sorokin.engineer/ru/regular_expressions/#assertions-lookahead-lookahead
- а это уже не POSIX, а PCRE, если я не ошибаюсь.

#177:  Author: AvadaLocation: Россия, Саратов PostPosted: Mon Nov 04, 2024 22:45
    —
rexen wrote:
не упоминаются "просмотры вперёд или назад"

Упоминаются — и уже достаточно давно (TC 10.00). Откройте в английской справке раздел по регуляркам и поищите по словам Look ahead/behind. На русский тоже переведено давно, но пока обновлённая справка не вышла.

#178:  Author: BatyaLocation: Москва, Россия PostPosted: Tue Jul 01, 2025 19:49
    —
Приветствую!
Давно не возился с регулярными выражениями. Но возникла необходимость разобраться с именованными группами. Пока не получается. Помогите выделить число из текста, содержащего разделители групп разрядов, в группу с именем.
Например, из строк "1,234,567" или "1 234 567" нужно выделить значение "1234567". При этом количество символов в числе переменное.
Есть рабочий шаблон "(?<VALUE>\d+([\.\s,]\d{3})*)", но он возвращает значение, включая разделители групп разрядов. А как без них?
Попробовал "(?<VALUE>\d+((?:[\.\s,])\d{3})*)", но что-то не работает Sad
Помогите, пожалуйста, у кого рука на это уже набита.

#179:  Author: Monarch-LFV PostPosted: Wed Jul 02, 2025 01:02
    —
Batya
Если это в простом текстовом редакторе, то тут без цикла, а без цикла только так:
Code:
(<Value>\d+)([\.,\s ])?(\d{3})*\2?(\d{3})*\2?(\d{3})*\2?(\d{3})*\2?(\d{3})*\2?(\d{3})*\2?(\d{3})*\2?(\d{3})*\2?(\d{3})*

То есть, для каждой группы разрядов выделяем свою подгруппу, в замене так:
Code:
\1\3\4\5\6\7\8\9\10\11

Вторая подгруппа отдана для определения разделителя, поэтому пропущена, чтобы в других местах был однозначно такой же.
И еще нюанс, бывает, в качестве разделителя разрядов ставят неразрывный пробел (Alt+160), форум этот символ не передает, поэтому во второй группе вместо пробела нужно поставить неразрывный пробел, а точку бы убрал, так как это уже разделитель дробной части (для англ.): ([,\s ])

#180:  Author: BatyaLocation: Москва, Россия PostPosted: Wed Jul 02, 2025 01:59
    —
Monarch-LFV
Не то. Нюанс именно в именованных группах. Нужно получить значение для <VALUE>.



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


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

Page 1 of 1

Powered by phpBB © 2001, 2005 phpBB Group