Нужна помощь с regular expression

Обсуждение Total Commander. Установка, использование, настройка, решение проблем, скрытые функции. Обсуждение новых версий.

Модераторы: d-view, Моторокер, Avada, CaptainFlint, Nik

Ответить
Tis Sedo
Сообщения: 7
Зарегистрирован: Вс ноя 27, 2005 09:10

Нужна помощь с regular expression

Сообщение Tis Sedo »

Кто-нибудь знает как я могу переименовать файл bla.bla.1.2.3.4 в бла бла 1.2.3.4. Иначе говоря избавится от точки между словами и перед цифрами, но не трогать ее между цифрами. Моих жалких потуг понять regular expression на это не хватает.
Заранее благодарен.
Аватара пользователя
Alextp
Сообщения: 4957
Зарегистрирован: Вс фев 06, 2005 17:21

Сообщение Alextp »

\w+\.\w+\.\d[\d\.]+
Соответственно, в MRT выделить скобками все 3 части (между точками).
Tis Sedo
Сообщения: 7
Зарегистрирован: Вс ноя 27, 2005 09:10

Сообщение Tis Sedo »

Alextp спасибо за быстрый ответ, но наверное я полный идиот - у меня твоя формула не работает, может быть потому, что я не совсем понял про скобки. Можешь написать что конкретно я должен написать в "Search for" и "Replace with". Извини, еще раз спасибо за ответ.
Аватара пользователя
Alextp
Сообщения: 4957
Зарегистрирован: Вс фев 06, 2005 17:21

Сообщение Alextp »

Сейчас разобрался наконец:

Search for: (\w+)\.(\w+)\.(\d[\d\.]+)
Replace with: $1 $2 $3
Tis Sedo
Сообщения: 7
Зарегистрирован: Вс ноя 27, 2005 09:10

Сообщение Tis Sedo »

Спасибо, РАБОТАЕТ но только для 2 слов, я понял как сделать для 3,4 слов и более. Но нет ли идеи о более независимой от количества слов формуле? Еще раз спасибо
Аватара пользователя
Alextp
Сообщения: 4957
Зарегистрирован: Вс фев 06, 2005 17:21

Сообщение Alextp »

Tis Sedo писал(а): я понял как сделать для 3,4 слов и более. Но нет ли идеи о более независимой от количества слов формуле? Еще раз спасибо
Есть: заменяем все точки, которые следуют после букв, на пробелы:

Search for: ([a-z])\.
replace with: "$1 " (без кавычек, пробел в конце!)
Tis Sedo
Сообщения: 7
Зарегистрирован: Вс ноя 27, 2005 09:10

Сообщение Tis Sedo »

Спасибо большое,
Все работает замечательно.
zoverg
Сообщения: 4
Зарегистрирован: Вс мар 17, 2013 16:12

Сообщение zoverg »

Тоже желательна помощь с regexp. Впервые заморочиваюсь ими в TC и помимо этого опыт с ними у меня крайне скудный.

Пытаюсь составить шаблон поиска файлов с названием типа:
2011.05.14_14.15.18___104_8634
2014.03.29_14.00.20___DSC04783

чтобы найти файлы, где в дате и/или времени по ошибке в качестве разделителя стоит не точка, а любой другой символ (например, "," или "-") в любом из 4-х мест и ошибок может быть как одна, так и 2, 3, 4.

Мои потуги встали в тупик ещё на таком варианте:

(\d{4})[^\.](\d{2})[^\.](\d{2})_(\d{2})[^\.](\d{2})[^\.](\d{2})

Но разумеется такой шаблон не подходит - он найдёт только файлы с ошибками во всех четырёх местах одновременно, а перебирать все комбинации 1-4 ошибок в любом из 4-х мест, сами понимаете, накладно.

А такая конструкция и вовсе не работает никак (разнесено на несколько строк для наглядности), видимо понимание синтаксиса у меня совсем плохое:

(((\d{4})[^\.](\d{2})\.(\d{2})_(\d{2})\.(\d{2})\.(\d{2}))|
((\d{4})\.(\d{2})[^\.](\d{2})_(\d{2})\.(\d{2})\.(\d{2}))|
((\d{4})\.(\d{2})\.(\d{2})_(\d{2})[^\.](\d{2})\.(\d{2}))|
((\d{4})\.(\d{2})\.(\d{2})_(\d{2})\.(\d{2})[^\.](\d{2})))

Но даже если бы работала, то нашла бы файлы только с одной ошибкой, хоть и в любом месте.

Возможно ли составить конструкцию данным инструментом в его реализации TC, где позиции для точек-разделителей были бы как-то взаимозависимы? Если да, то с помощью каких операторов/методов это можно осуществить?

Вопрос не срочный. Мне это нужно для собственного понимания.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

zoverg
Тут 15 подходящих комбинаций. Скобки нужны только при заменах или перечислении вариантов внутри выражения. Поэтому тут при поиске они лишние.
Единственный вариант, который я вижу правильным - это искать файлы с любым символом по точке: ^\d{4}.\d{2}.\d{2}_\d{2}.\d{2}.\d{2}.+
После вывода на панель нажать Num+ и вставить: <^\d{4}\.\d{2}\.\d{2}_\d{2}\.\d{2}\..+
Нажать Enter и * (инвертация). Всё, можно работать с проблемными именами.
Если же нужно просто произвести замену на точки, то Num+ вообще не нужен, можно выделить и всё по Ctrl+A, вызвать ИГП, отметить только "Рег. выраж.".
Найти: ^(\d{4}).(\d{2}).(\d{2}_\d{2}).(\d{2}).(.+)
Заменить: $1.$2.$3.$4.$5
Enter.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
zoverg
Сообщения: 4
Зарегистрирован: Вс мар 17, 2013 16:12

Сообщение zoverg »

Flasher, спасибо за помощь.)
Ответить