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


#151:  Author: AvadaLocation: Россия, Саратов PostPosted: Sat Jan 22, 2022 19:53
    —
zoog
1. В справочном примере только два подвыражения меняются местами (причём с указанием расширения), так что ваше "простое действие" не оттуда.
2. Вопрос надо формулировать не с "типа", а точно. Каких полей не бывает? Третьего и/или четвёртого? Правильно ли я понял, что при любом варианте должны остаться только первые два поля с начала, переставленные местами и разделённые одним пробелом? Или нет? (Кстати, для переменного числа полей ваше выражение в любом случае не годилось бы уже потому, что все чёрточки за пределами скобок указаны как реальные символы в точном количестве три штуки.)
2. Для обсуждения регулярных выражений на форуме есть общие темы, и создание новых тем по каждому частному вопросу — явно не самая хорошая идея. Перенесено по принадлежности.

#152:  Author: sa PostPosted: Sat Jan 22, 2022 20:14
    —
zoog
Можно так попробовать искать, если задвоенный пробел в результате не смущает:
([^-]*) - ([^-]*)(.*)
От задвоения можно избавиться, добавив пробел после маски файла [N] и в выражении для поиска, перед (.*).

#153:  Author: AvadaLocation: Россия, Саратов PostPosted: Sun Jan 23, 2022 09:30
    —
sa
Да, с указанными поправками работает. (Если, как было сказано выше, техзадание понято правильно.)
Упомяну также для ясности про указание $2 $1 в поле "Заменить на", включение опции "Рег. выраж." и выключение опции [E].

#154:  Author: sa PostPosted: Sun Jan 23, 2022 11:03
    —
Avada wrote:
с указанными поправками работает.

К сожалению, не в случае, когда в полях "автор" и/или "год" присутствует тире…
Тут, как вариант, потребуется предварительный проход переименования с заменой тире в разделителе полей (пробел-тире-пробел) на какой-нибудь экзотический символ, которого заведомо нет в содержимом первых двух полей и правка выражения для поиска с заменой (в трёх местах) тире на этот символ.

#155:  Author: AvadaLocation: Россия, Саратов PostPosted: Sun Jan 23, 2022 17:51
    —
sa
Да, но в случае редких исключений можно и выполнить точечную правку. Кроме того, всё-таки в обсуждаемом виде это не тире, а дефис (чёрточка, минус, -). А тире бывает короткое (–) и длинное (—).

#156:  Author: zoog PostPosted: Wed Jan 26, 2022 00:32
    —
Avada, пардон что не отвечал - уведомления не сработали, видимо.
1) А какая разница, сколько полей? Всё, что больше 1го - логически монопенисуально, не? Если б нумерация шла с 1го - всё б у меня получилось.
2) У нас есть 3-4-возможно более полей (мне интересно решить общий случай), поменять первые 2-3, гарантированно присутствующие.
Quote:
для переменного числа полей ваше выражение в любом случае не годилось бы уже потому, что все чёрточки за пределами скобок указаны как реальные символы в точном количестве три штуки.

Не понял(( если реальное число полей меньше, чем в моём выражении - всё сломается, имеете в виду.
2) Не разобрался сразу, спасибо за перенос.

sa wrote:

Можно так попробовать искать, если задвоенный пробел в результате не смущает:
([^-]*) - ([^-]*)(.*)

Так, мы заменяем (всё, что угодно) на (любую последовательность символов без тире) - это типа упрощает логику поиска?
Спасибо)
Работает. Так проблема была не в том, что группы искались с конца имени?

#157:  Author: AvadaLocation: Россия, Саратов PostPosted: Wed Jan 26, 2022 11:15
    —
zoog
Не только в полях дело, а ещё и в чёрточках-разделителях между скобками, которых при вашей форме записи можно найти ровно столько, сколько было указано, а если их по факту меньше/больше, наперекосяк идёт вся операция. А что счёт подвыражений для поиска-замены (при правильном синтаксисе, естественно) идёт именно с начала, сказано в справке TC.
Поскольку рабочее решение вашей задачи дано, то обсуждать тут дальше, кто что имел в виду, особого смысла не вижу. Если очень интересно — читайте справку и экспериментируйте самостоятельно.

#158:  Author: zoog PostPosted: Wed Jan 26, 2022 15:08
    —
Avada,
Quote:
которых при вашей форме записи можно найти ровно столько, сколько было указано

Ну да, найти столько, остальные игнорировать. Разве не так программирование / обработка ошибок работает?)
Quote:
А что счёт подвыражений для поиска-замены (при правильном синтаксисе, естественно) идёт именно с начала, сказано в справке TC.

Счёт (порядок счёта) идёт с первого, но само первое поле (при числе полей, бОльшем указанного) выбирается не с начала, то есть при 3х полях в условии и 5 полях на входе считается не $1 $2 $3**, a **$1 $2 $3.
Ещё раз спасибо за помощь.

#159:  Author: AvadaLocation: Россия, Саратов PostPosted: Wed Jan 26, 2022 16:23
    —
Ваша исходная запись означала подвыражения для поиска-замены, разделённые ровно тремя безусловно присутcтвующими чёрточками, обрамлёнными пробелами. Поэтому никакое "остальные игнорировать" тут не прокатывает: часть имён просто не находится или интерпретируется неверно. Правильный синтаксис с упаковкой всего нужного в скобки был дан позже (со всеми уточнениями), и вот там действительно учитываются только первые два подвыражения (они меняются местами с убиранием лишних разделителей), а вся следующая часть имени игнорируется (ибо $3 для замены не указано).

#160:  Author: zoog PostPosted: Wed Jan 26, 2022 16:47
    —
Дошло. Нужно было дополнить (.*) - тогда обрабатывались бы лишь первые поля?

#161:  Author: AvadaLocation: Россия, Саратов PostPosted: Wed Jan 26, 2022 17:57
    —
zoog
Не только это, надо ещё нормально границы подвыражений указать и все пробелы соблюсти. Синтаксис правильного варианта проанализируйте как следует (к вашим услугам справочный раздел по регуляркам и материалы форума). В частности, ([^-]*) означает 0 или более любых символов, кроме чёрточки, а (.*) — 0 или более каких угодно символов. А чёрточка вне скобок стоит в единственном месте, где её действительно следовало указать. Дальше, если нужно, разбирайтесь самостоятельно.

#162:  Author: zoog PostPosted: Wed Jan 26, 2022 18:04
    —
Quote:
В частности, ([^-]*) означает 0 или более любых символов, кроме чёрточки, а (.*) — 0 или более каких угодно символов.

Ну да, в данном случае как раз последующие чёрточки нельзя учитывать. Только первые (поля).

#163:  Author: rexen PostPosted: Mon May 23, 2022 13:50
    —
Камрады, прошу помощи.
Рядовая проблема с очисткой имён файлов (скачиваемых роликов) от всякого мусора и лишних символов.
Меня устраивает простое регулярное выражение, удаляющее всё кроме букв и цифр:
Code:
[^\wА-Яа-яёЁ ]

^ - "кроме"
\w - латинские цифробуквы
А-Яа-яёЁ - кирилица
(пробелы оставляем)

НО!

После удаления, скажем, дефиса, обрамляющие его пробелы остаются - т.е. получается задваивание пробелов.
И я уже всю голову поломал и всякие варианты поперебирал, но не могу никак придумать, как это задваивание (затраивание...) удалять этим же проходом. Вот пройтись вторым разом по тем же файлам и отдельным выражением убрать все повторяющиеся пробелы - не проблема. А вот за один проход - подозреваю, никак. Или?

#164:  Author: sa PostPosted: Mon May 23, 2022 14:42
    —
rexen
Так не сработает?
Code:
[^\wА-Яа-яёЁ ]|[  ]

#165:  Author: rexen PostPosted: Mon May 23, 2022 20:48
    —
sa, нет, Ваша регулярка удаляет все пробелы подчистую.
Neutral
Я так задавать "двойной пробел" пробовал самыми разными способами.
Тут, видимо, причина не в том, чтобы извернуться и выдумать некое неординарное регулярное выражение, а в самом принципе, который никак кроме в 2 шага не реализовать:

1) УДАЛИТЬ все неалфавитные символы
2) ЗАМЕНИТЬ множественные пробелы ОДНИМ пробелом

Т.е. мало того, что это две разные операции - в первой всё найденное заменяется ничем, а во второй - одинарным пробелом, так ещё и после прохода первой операции появляются эти самые лишние пробелы. Я в регулярках не спец - не в курсе как они там внутри обрабатываются - можно ли вообще в принципе организовать двойной проход одним выражением. Как программист-junior пока сомневаюсь.

---

Разве что напихать некий массив-перечисление всевозможных комбинаций пробельных/неалфавитных символов с ЗАМЕНОЙ любой из них на один пробел. Но уж больно некрасивый выход, да и число комбинаций слишком большое - придётся оставлять только самые очевидные.

Потренироваться можно на вот таком примере:
Code:
01.  PODcast - прямой_эфир. Отвечаем , вопросы, комментарии (@17`05'2022).m4a

(здесь, кстати, по логике ещё и подчёркивание (и прочие разделяющие слова непробельные символы) надо бы пробелом заменить)



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


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

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

Powered by phpBB © 2001, 2005 phpBB Group