Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

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

 
Post new topic   Reply to topic    Total Commander Forum Index -> Общие вопросы printer-friendly view
View previous topic :: View next topic  
Author Message
Tis Sedo



Joined: 27 Nov 2005
Posts: 7

Post (Separately) Posted: Wed Aug 01, 2007 19:52    Post subject: Нужна помощь с regular expression Reply with quote

Кто-нибудь знает как я могу переименовать файл bla.bla.1.2.3.4 в бла бла 1.2.3.4. Иначе говоря избавится от точки между словами и перед цифрами, но не трогать ее между цифрами. Моих жалких потуг понять regular expression на это не хватает.
Заранее благодарен.
Back to top
View user's profile Send private message
Alextp



Joined: 06 Feb 2005
Posts: 4957

Post (Separately) Posted: Wed Aug 01, 2007 20:06    Post subject: Reply with quote

\w+\.\w+\.\d[\d\.]+
Соответственно, в MRT выделить скобками все 3 части (между точками).
_________________
UniViewer - CudaText - LogViewer
Back to top
View user's profile Send private message
Tis Sedo



Joined: 27 Nov 2005
Posts: 7

Post (Separately) Posted: Wed Aug 01, 2007 20:37    Post subject: Reply with quote

Alextp спасибо за быстрый ответ, но наверное я полный идиот - у меня твоя формула не работает, может быть потому, что я не совсем понял про скобки. Можешь написать что конкретно я должен написать в "Search for" и "Replace with". Извини, еще раз спасибо за ответ.
Back to top
View user's profile Send private message
Alextp



Joined: 06 Feb 2005
Posts: 4957

Post (Separately) Posted: Wed Aug 01, 2007 20:45    Post subject: Reply with quote

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

Search for: (\w+)\.(\w+)\.(\d[\d\.]+)
Replace with: $1 $2 $3
_________________
UniViewer - CudaText - LogViewer
Back to top
View user's profile Send private message
Tis Sedo



Joined: 27 Nov 2005
Posts: 7

Post (Separately) Posted: Wed Aug 01, 2007 21:29    Post subject: Reply with quote

Спасибо, РАБОТАЕТ но только для 2 слов, я понял как сделать для 3,4 слов и более. Но нет ли идеи о более независимой от количества слов формуле? Еще раз спасибо
Back to top
View user's profile Send private message
Alextp



Joined: 06 Feb 2005
Posts: 4957

Post (Separately) Posted: Wed Aug 01, 2007 21:36    Post subject: Reply with quote

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


Есть: заменяем все точки, которые следуют после букв, на пробелы:

Search for: ([a-z])\.
replace with: "$1 " (без кавычек, пробел в конце!)
_________________
UniViewer - CudaText - LogViewer
Back to top
View user's profile Send private message
Tis Sedo



Joined: 27 Nov 2005
Posts: 7

Post (Separately) Posted: Wed Aug 01, 2007 23:47    Post subject: Reply with quote

Спасибо большое,
Все работает замечательно.
Back to top
View user's profile Send private message
zoverg



Joined: 17 Mar 2013
Posts: 4

Post (Separately) Posted: Sat Nov 21, 2015 04:05    Post subject: Reply with quote

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

Вопрос не срочный. Мне это нужно для собственного понимания.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sat Nov 21, 2015 11:02    Post subject: Reply with quote

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) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
zoverg



Joined: 17 Mar 2013
Posts: 4

Post (Separately) Posted: Sat Nov 21, 2015 19:33    Post subject: Reply with quote

Flasher, спасибо за помощь.)
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Общие вопросы All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
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