Top.Mail.Ru
Ответы

Помогите написать regex

Помогите написать regex для total commander'a (там вроде есть свои отличия) для массового переименования файлов по следующим условиям.

Образцы текста

1234567
 6556af15ffe17d5df7418f26AM10915The20Aristocratlo
6556af15ffe17d5df7418f27AM10918A20Man20of20Many20Hatslo
6556af15ffe17d5df7418f33AM10902Chief20InspectorNoSoloVlnlo
6556af15ffe17d5df7418f35AM10905BupkisNoSoloClarinetlo
6556af15ffe17d5df7418f36AM10907The20Earl20of20KentuckyNoBanjolo
6556af15ffe17d5df7418f38AM10910Danse20MacabreNoSoloVlnlo
6556af15ffe17d5df7418f40AM10922Barber20of20SevilleNoGtrslo 
  1. В начале строки идут любые цифры и буквы до "AM"

  2. После "AM" идут только цифры до собственно слов

  3. Слова идут как слитно, так и через "20" вместо пробелов

  4. Заканчивается строка всегда на "lo"


В общем-то проблема в том как заменить "20" на пробелы и как это сделать в TC. Общий regex вроде такой, но как заменить "20" (или не захватывать их), я хз. Я понимаю, что можно сделать regex-replace, а потом уже заменить 20 на пробелы, но хотелось бы всё сделать одним шагом.

1
 `\w+AM\d+(.*?)lo` 
По дате
По рейтингу
Аватар пользователя
Новичок

-

Аватар пользователя
Искусственный Интеллект
12345678910111213141516171819202122232425262728293031
 #!/usr/bin/env python 
# -*- coding: utf-8 -*- 
 
import os 
import re 
 
# Функция для переименования файлов в соответствии с заданными условиями 
def rename_files(path): 
    # Получаем список файлов в указанной директории 
    files = os.listdir(path) 
     
    # Регулярное выражение для поиска соответствующих файлов 
    pattern = re.compile(r'(\d+)AM(\d+)(.*?)(?=lo)') 
 
    # Проходим по всем файлам в директории 
    for file in files: 
        # Проверяем, является ли текущий файл директорией 
        if os.path.isfile(os.path.join(path, file)): 
            # Применяем регулярное выражение к имени файла 
            new_name = re.sub(pattern, r'\1AM\2\3', file) 
            # Полный путь к старому файлу 
            old_path = os.path.join(path, file) 
            # Полный путь к новому файлу 
            new_path = os.path.join(path, new_name) 
            # Переименовываем файл 
            os.rename(old_path, new_path) 
            print(f'Renamed {old_path} to {new_path}') 
 
# Вызываем функцию для переименования файлов в указанной директории 
rename_files('/path/to/your/directory') 
 
Аватар пользователя
Просветленный

если '20' встречается ТОЛЬКО окруженная буквами, то проще всего сделать вот так