[tc] Не получается составить правильный regexp для переименования :(

durka82

Пытаюсь переименовать файлы с помощью группового переименования.
Но стандартных возможностей не хватает - пробую использовать регэксп.
Устанавливаю галочку Рег.выраж.
Маску делаю по-умолчанию.
Найти делаю: \.([.])_([\d])\.
Заменить на делаю: $2.$1
Жму Выполнить - результата не получаю
Имена файлов такого типа:
MSDNMag.08_2005.djvu
MSDNMag.december_2005.djvu
Для начала я хочу поменять в них местами год и месяц.
Соотв для этого в регэкспе между двумя точками ищу произвольное множество символов и множество цифр, разделенные подчеркиванием.
И меняю эти множества местами.
Все это написано на основе помощи к Тотал Коммандиру.
Где ошибка и чего я не понимаю?

artimon

А если так?
\.(.+)_(\d+)\.

И заменять на
.$2.$1.

Fragaria

Найти делаю: \.([.])_([\d])\.
Заменить на делаю: $2.$1
\.([^_]*)_(\d*)\.

durka82

Круто, так работает!
Спасибо
Понял в чем дело - я тормоз
[] с единственным символом содержимого вообще смысла не имеют.

artimon

Не совсем. Некоторые символы (в том числе точка) теряют свой особый статус внутри квадратных скобок. В частности записи \. и [.] эквивалентны.

durka82

Это тоже работает, но + здесь более уместен, чем * (в смысле возможных ошибок в регэкспах)

durka82

Но первый вариант короче, а значит и лучше.
Короче, начало положено - пойду дальше ботать регэкспы

Fragaria

Угу, плюс там уместнее, я просто про него забыл, а нет =)

durka82

Еще кстати, у тебя в выражении есть такое: [^_].
Это ведь означает либо символ ^, либо _.
Какой смысл это несет, если ^ вообще не встречается в тексте?
Или ты хотел использовать его как начало строки? (но тогда получается, что в [] некоторые спецсимволы таки работают?)

artimon

Плохо заботал.
[^_] означает любой символ кроме „_“
Я в своём предыдущем сообщении забыл добавить, что некоторые символы приобретают специальный смысл. В общем ботай дальше

durka82

Я просто тогда до этого еще не дочитал
Сейчас прочитал всю помощь по рег выражениям в тс, но не нашел там вариантности при замене.
То есть допустим у меня в регэкспе есть выражение вида (вар1|вар2|вар3).
Как сделать, чтобы каждый из варов заменялся на соотв выражение?
Или здесь это делается только за счет использования отдельного регекспа для каждого выражения и последовательного их применения?

artimon

Только по очереди.
Оставить комментарий
Имя или ник:
Комментарий: