View previous topic :: View next topic |
Как часто вы пользуетесь регулярными выражениями (RegEx)? |
Раз в день |
|
34% |
[ 36 ] |
Раз в неделю |
|
18% |
[ 19 ] |
Раз в месяц |
|
27% |
[ 28 ] |
А что это такое? |
|
19% |
[ 20 ] |
|
Total Votes : 103 |
|
Author |
Message |
likhobory
Joined: 25 Feb 2009 Posts: 63 Location: Москва
|
(Separately) Posted: Mon May 23, 2022 23:40 Post subject: |
|
|
Не программист, но любитель. Из опыта - чем проще регулярка, тем большего количества грабель можно избежать. В Вашем случае я бы предложил следующий 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 |
|
Back to top |
|
 |
Monarch-LFV

Joined: 22 Jul 2019 Posts: 323
|
(Separately) Posted: Tue May 24, 2022 04:33 Post subject: |
|
|
rexen
Удаляет образующиеся двойные пробелы (например, в сочетании " - "), но если в имени изначально были двойные пробелы, то не удалит.
А вообще, согласен с предыдущим оратором - если требуется много операций/хотелок/проходов, то проще скрипт сделать с несколькими строками по последовательным заменам. Только тогда получится сделать что-то адекватное. |
|
Back to top |
|
 |
sa
Joined: 29 Apr 2009 Posts: 2686
|
(Separately) Posted: Tue May 24, 2022 10:56 Post subject: |
|
|
rexen wrote: | удаляет все пробелы подчистую |
Да, поторопился: ошибочно принял удаление всех пробелов за ожидаемое мной – только задвоенных (а одиночных в моём примере не было).
Если говорить о нескольких проходах, то, начиная с версии TC 10.50, их можно выполнить одной кнопкой без каких-либо дополнительных нажатий. Например, использовать связку команд наподобие такой:
cm_SelectAllFiles,em_ren_1,cm_wait 0,cm_SelectAllFiles,em_ren_2
Здесь пользовательские команды (em_) имеют вид MULTIRENAME==имя_шаблона. |
|
Back to top |
|
 |
Monarch-LFV

Joined: 22 Jul 2019 Posts: 323
|
(Separately) Posted: Tue May 24, 2022 11:41 Post subject: |
|
|
rexen
Чтоб не оффтопить здесь, разместил в этой ветке скрипт VBS по вашим хотелкам. |
|
Back to top |
|
 |
rexen
Joined: 29 Mar 2018 Posts: 10
|
(Separately) Posted: Sat Dec 16, 2023 20:24 Post subject: |
|
|
Народ, кстати, "ЧатГопота" МОЖЕТ!
Решил сиё поделие OpenAI помучать моим вопросом - ну так он сразу мне почти идеальный регэксп выдал:
(там после плюса в конце ещё пробел обязателен - его почему-то не видно)
Я только внёс кириллицу в множество и Ё - ChatGPT проигнорил наш алфавит (культура отмены, штоль.. )
в диалоге Тотала группового переименования - в поле "заменить" на один пробел
В итоге оно справляется и с образующимися дублями пробелов, но... кроме случая когда НЕнужный символ в самом конце строки - он его меняет на пробел и там и оставляет, хотя в идеале финализирующий пробел в имени файла - лишний.
Так что велкам: https://chat.openai.com/
(да, там целая проблема с доступом к сервису из наших "палестин", но решения есть - ищите и обрящете) |
|
Back to top |
|
 |
Rainbow-Spike

Joined: 09 Mar 2019 Posts: 9 Location: Амурская область, Циолковский
|
(Separately) Posted: Mon Sep 30, 2024 08:48 Post subject: Вариатор внутри регулярки |
|
|
Есть немного отличающиеся шаблоны для сжатия имён протоколов совещаний трёх типов
Протокол.+ № ?(\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
Возможно ли как-то слить все эти шаблоны в один с условием, определяющим вставку буквы? _________________ * Руководитель интернационального онлайн-переводчика "Комикслейт"
* Инженер-эколог космодрома "Восточный"
* Фиолетовый дракон-гетеросексуал |
|
Back to top |
|
 |
Monarch-LFV

Joined: 22 Jul 2019 Posts: 323
|
(Separately) Posted: Mon Sep 30, 2024 15:26 Post subject: |
|
|
Rainbow-Spike
Не совсем понятна постановка задачи, приведите примеры начального вида и того, что нужно получить. Судя, например, по вашей первой записи вижу для себя такой пример:
Code: | Протокол ffff № 225-пр. от 30.09.2024 г. Протокол оперативного совещания от 30.09.2024 г |
Смущает, что в названии 2 раза "Протокол" и дата, так и должно быть?
Добавлено спустя 9 минут:
Пока выстраивается такой вариант:
Code: | .*?№ ?(\d+).*?от ([\d+\.]+).*?Протокол (.)?.*?совещания.*
$2 Пр\U$3С-$1 |
Так? |
|
Back to top |
|
 |
Rainbow-Spike

Joined: 09 Mar 2019 Posts: 9 Location: Амурская область, Циолковский
|
(Separately) Posted: Fri Oct 04, 2024 12:31 Post subject: |
|
|
да, там был протокол протокола
спасибо, регулярка работает. про флаг \U не знал...
а есть ли возможность вставлять на выбор в зависимости от стриггеренной группы в регекспе? ну то есть аналог функции if then else
перловские регекспы такое умеют, а может ли уметь ТК? _________________ * Руководитель интернационального онлайн-переводчика "Комикслейт"
* Инженер-эколог космодрома "Восточный"
* Фиолетовый дракон-гетеросексуал |
|
Back to top |
|
 |
Monarch-LFV

Joined: 22 Jul 2019 Posts: 323
|
(Separately) Posted: Fri Oct 04, 2024 13:09 Post subject: |
|
|
Rainbow-Spike
Нет, TC не поддерживает при переименовании условия. Это нужно писать скрипт, например на VBS. А чем вас не устраивает предложенный мной вариант? Имя формируется по первой букве. |
|
Back to top |
|
 |
Rainbow-Spike

Joined: 09 Mar 2019 Posts: 9 Location: Амурская область, Циолковский
|
(Separately) Posted: Sat Oct 05, 2024 20:15 Post subject: |
|
|
Устраивает, я просто про запас спросил, для экономии размера списка шаблонов. Жаль, что условия не поддерживаются _________________ * Руководитель интернационального онлайн-переводчика "Комикслейт"
* Инженер-эколог космодрома "Восточный"
* Фиолетовый дракон-гетеросексуал |
|
Back to top |
|
 |
rexen
Joined: 29 Mar 2018 Posts: 10
|
(Separately) Posted: Mon Nov 04, 2024 22:17 Post subject: |
|
|
Нигде не могу найти чёткое и внятное пояснение, какой всё-таки стандарт регулярок реализован в 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, если я не ошибаюсь. |
|
Back to top |
|
 |
Avada

Joined: 01 Aug 2008 Posts: 10411 Location: Россия, Саратов
|
(Separately) Posted: Mon Nov 04, 2024 22:45 Post subject: |
|
|
rexen wrote: | не упоминаются "просмотры вперёд или назад" |
Упоминаются — и уже достаточно давно (TC 10.00). Откройте в английской справке раздел по регуляркам и поищите по словам Look ahead/behind. На русский тоже переведено давно, но пока обновлённая справка не вышла. _________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
Back to top |
|
 |
|