К ТСКВ: примеры регулярных выражений
Select messages from
# through # FAQ
[/[Print]\]
Goto page Previous  1, 2, 3 ... 10, 11, 12  :| |:
Total Commander -> Общие вопросы
Как часто вы пользуетесь регулярными выражениями (RegEx)?
Раз в день
34%
 34%  [ 36 ]
Раз в неделю
18%
 18%  [ 19 ]
Раз в месяц
27%
 27%  [ 28 ]
А что это такое?
19%
 19%  [ 20 ]
Total Votes : 103


#166:  Author: likhoboryLocation: Москва PostPosted: Mon May 23, 2022 23:40
    —
Не программист, но любитель. Из опыта - чем проще регулярка, тем большего количества грабель можно избежать. В Вашем случае я бы предложил следующий 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

#167:  Author: Monarch-LFV PostPosted: Tue May 24, 2022 04:33
    —
rexen
Code:
\s*[^\wА-Яа-яёЁ ]

Удаляет образующиеся двойные пробелы (например, в сочетании " - "), но если в имени изначально были двойные пробелы, то не удалит.
А вообще, согласен с предыдущим оратором - если требуется много операций/хотелок/проходов, то проще скрипт сделать с несколькими строками по последовательным заменам. Только тогда получится сделать что-то адекватное.

#168:  Author: sa PostPosted: Tue May 24, 2022 10:56
    —
rexen wrote:
удаляет все пробелы подчистую

Да, поторопился: ошибочно принял удаление всех пробелов за ожидаемое мной – только задвоенных (а одиночных в моём примере не было).
Если говорить о нескольких проходах, то, начиная с версии TC 10.50, их можно выполнить одной кнопкой без каких-либо дополнительных нажатий. Например, использовать связку команд наподобие такой:
cm_SelectAllFiles,em_ren_1,cm_wait 0,cm_SelectAllFiles,em_ren_2
Здесь пользовательские команды (em_) имеют вид MULTIRENAME==имя_шаблона.

#169:  Author: Monarch-LFV PostPosted: Tue May 24, 2022 11:41
    —
rexen
Чтоб не оффтопить здесь, разместил в этой ветке скрипт VBS по вашим хотелкам.

#170:  Author: rexen PostPosted: Sat Dec 16, 2023 20:24
    —
Народ, кстати, "ЧатГопота" МОЖЕТ!
Решил сиё поделие OpenAI помучать моим вопросом - ну так он сразу мне почти идеальный регэксп выдал:
Code:
[^\wА-Яа-яёЁ]+| +
(там после плюса в конце ещё пробел обязателен - его почему-то не видно)

Я только внёс кириллицу в множество и Ё - ChatGPT проигнорил наш алфавит (культура отмены, штоль.. Confused )
в диалоге Тотала группового переименования - в поле "заменить" на один пробел
В итоге оно справляется и с образующимися дублями пробелов, но... кроме случая когда НЕнужный символ в самом конце строки - он его меняет на пробел и там и оставляет, хотя в идеале финализирующий пробел в имени файла - лишний.

Так что велкам: https://chat.openai.com/
(да, там целая проблема с доступом к сервису из наших "палестин", но решения есть - ищите и обрящете)

#171: Вариатор внутри регулярки Author: Rainbow-SpikeLocation: Амурская область, Циолковский PostPosted: Mon Sep 30, 2024 08:48
    —
Есть немного отличающиеся шаблоны для сжатия имён протоколов совещаний трёх типов

Протокол.+ № ?(\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

Возможно ли как-то слить все эти шаблоны в один с условием, определяющим вставку буквы?

#172:  Author: Monarch-LFV PostPosted: Mon Sep 30, 2024 15:26
    —
Rainbow-Spike
Не совсем понятна постановка задачи, приведите примеры начального вида и того, что нужно получить. Судя, например, по вашей первой записи вижу для себя такой пример:
Code:
Протокол ffff № 225-пр. от 30.09.2024 г. Протокол оперативного совещания от 30.09.2024  г

Смущает, что в названии 2 раза "Протокол" и дата, так и должно быть?

Добавлено спустя 9 минут:

Пока выстраивается такой вариант:
Code:
.*?№ ?(\d+).*?от ([\d+\.]+).*?Протокол (.)?.*?совещания.*
$2 Пр\U$3С-$1

Так?

#173:  Author: Rainbow-SpikeLocation: Амурская область, Циолковский PostPosted: Fri Oct 04, 2024 12:31
    —
да, там был протокол протокола

спасибо, регулярка работает. про флаг \U не знал...

а есть ли возможность вставлять на выбор в зависимости от стриггеренной группы в регекспе? ну то есть аналог функции if then else

перловские регекспы такое умеют, а может ли уметь ТК?

#174:  Author: Monarch-LFV PostPosted: Fri Oct 04, 2024 13:09
    —
Rainbow-Spike
Нет, TC не поддерживает при переименовании условия. Это нужно писать скрипт, например на VBS. А чем вас не устраивает предложенный мной вариант? Имя формируется по первой букве.

#175:  Author: Rainbow-SpikeLocation: Амурская область, Циолковский PostPosted: Sat Oct 05, 2024 20:15
    —
Устраивает, я просто про запас спросил, для экономии размера списка шаблонов. Жаль, что условия не поддерживаются

#176:  Author: rexen PostPosted: Mon Nov 04, 2024 22:17
    —
Нигде не могу найти чёткое и внятное пояснение, какой всё-таки стандарт регулярок реализован в 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, если я не ошибаюсь.

#177:  Author: AvadaLocation: Россия, Саратов PostPosted: Mon Nov 04, 2024 22:45
    —
rexen wrote:
не упоминаются "просмотры вперёд или назад"

Упоминаются — и уже достаточно давно (TC 10.00). Откройте в английской справке раздел по регуляркам и поищите по словам Look ahead/behind. На русский тоже переведено давно, но пока обновлённая справка не вышла.

#178:  Author: BatyaLocation: Москва, Россия PostPosted: Tue Jul 01, 2025 19:49
    —
Приветствую!
Давно не возился с регулярными выражениями. Но возникла необходимость разобраться с именованными группами. Пока не получается. Помогите выделить число из текста, содержащего разделители групп разрядов, в группу с именем.
Например, из строк "1,234,567" или "1 234 567" нужно выделить значение "1234567". При этом количество символов в числе переменное.
Есть рабочий шаблон "(?<VALUE>\d+([\.\s,]\d{3})*)", но он возвращает значение, включая разделители групп разрядов. А как без них?
Попробовал "(?<VALUE>\d+((?:[\.\s,])\d{3})*)", но что-то не работает Sad
Помогите, пожалуйста, у кого рука на это уже набита.

#179:  Author: Monarch-LFV PostPosted: Wed Jul 02, 2025 01:02
    —
Batya
Если это в простом текстовом редакторе, то тут без цикла, а без цикла только так:
Code:
(<Value>\d+)([\.,\s ])?(\d{3})*\2?(\d{3})*\2?(\d{3})*\2?(\d{3})*\2?(\d{3})*\2?(\d{3})*\2?(\d{3})*\2?(\d{3})*\2?(\d{3})*

То есть, для каждой группы разрядов выделяем свою подгруппу, в замене так:
Code:
\1\3\4\5\6\7\8\9\10\11

Вторая подгруппа отдана для определения разделителя, поэтому пропущена, чтобы в других местах был однозначно такой же.
И еще нюанс, бывает, в качестве разделителя разрядов ставят неразрывный пробел (Alt+160), форум этот символ не передает, поэтому во второй группе вместо пробела нужно поставить неразрывный пробел, а точку бы убрал, так как это уже разделитель дробной части (для англ.): ([,\s ])

#180:  Author: BatyaLocation: Москва, Россия PostPosted: Wed Jul 02, 2025 01:59
    —
Monarch-LFV
Не то. Нюанс именно в именованных группах. Нужно получить значение для <VALUE>.



Total Commander -> Общие вопросы


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Goto page Previous  1, 2, 3 ... 10, 11, 12  :| |:
Page 12 of 12

Powered by phpBB © 2001, 2005 phpBB Group