Страница 1 из 1

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

Добавлено: Ср авг 01, 2007 19:52
Tis Sedo
Кто-нибудь знает как я могу переименовать файл bla.bla.1.2.3.4 в бла бла 1.2.3.4. Иначе говоря избавится от точки между словами и перед цифрами, но не трогать ее между цифрами. Моих жалких потуг понять regular expression на это не хватает.
Заранее благодарен.

Добавлено: Ср авг 01, 2007 20:06
Alextp
\w+\.\w+\.\d[\d\.]+
Соответственно, в MRT выделить скобками все 3 части (между точками).

Добавлено: Ср авг 01, 2007 20:37
Tis Sedo
Alextp спасибо за быстрый ответ, но наверное я полный идиот - у меня твоя формула не работает, может быть потому, что я не совсем понял про скобки. Можешь написать что конкретно я должен написать в "Search for" и "Replace with". Извини, еще раз спасибо за ответ.

Добавлено: Ср авг 01, 2007 20:45
Alextp
Сейчас разобрался наконец:

Search for: (\w+)\.(\w+)\.(\d[\d\.]+)
Replace with: $1 $2 $3

Добавлено: Ср авг 01, 2007 21:29
Tis Sedo
Спасибо, РАБОТАЕТ но только для 2 слов, я понял как сделать для 3,4 слов и более. Но нет ли идеи о более независимой от количества слов формуле? Еще раз спасибо

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

Search for: ([a-z])\.
replace with: "$1 " (без кавычек, пробел в конце!)

Добавлено: Ср авг 01, 2007 23:47
Tis Sedo
Спасибо большое,
Все работает замечательно.

Добавлено: Сб ноя 21, 2015 03:05
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, где позиции для точек-разделителей были бы как-то взаимозависимы? Если да, то с помощью каких операторов/методов это можно осуществить?

Вопрос не срочный. Мне это нужно для собственного понимания.

Добавлено: Сб ноя 21, 2015 10:02
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.

Добавлено: Сб ноя 21, 2015 18:33
zoverg
Flasher, спасибо за помощь.)