Замена нескольких шаблонов регулярных выражений за один проход - PullRequest
2 голосов
/ 09 мая 2020

Я новичок в python, и я искал метод для замены ряда шаблонов и не могу найти метод, который использует регулярное выражение, ни один из которых, как я обнаружил, не работал у меня, вот некоторые из моих шаблонов и код, который я использую:

regexes = {
    r'\s(\(|\[)(.*?)Mix(.*?)(\)|\])/i' : r"",
    r'\s(\(|\[)(.*?)Version(.*?)(\)|\])/i' : r"",
    r'\s(\(|\[)(.*?)Remix(.*?)(\)|\])/i' : r"",
    r'\s(\(|\[)(.*?)Extended(.*?)(\)|\])/i' : r"",
    r'\s\(remix\)/i' : r"",
    r'\s\(original\)/i' : r"",
    r'\s\(intro\)/i' : r"",
}

def multi_replace(dict, text):
    for key, value in dict.items():
        text = re.sub(key, value, text)
    return text

filename = "Testing (Intro)"

name = multi_replace(regexes, filename)

print(name)

Я беру имена файлов из каталогов musi c Я владею, поскольку я ди-джей, я принадлежу ко многим пулам звукозаписи, и они иногда маркируют свои песни следующим образом;

SomeGuy - здесь название песни (вступление)

SomeGirl - здесь название песни (ремикс)

SomeGirl - здесь название песни (расширенная версия)

SomeGuy - Здесь название песни (12 "Mix Vocal)

и так далее ...

мое регулярное выражение выше работает в PHP, в котором будут удалены все значения, такие как (Intro) (Remix) (Расширенная версия), et c. Таким образом, на выходе получается:

SomeGuy - здесь название песни

SomeGirl - здесь название песни

SomeGirl - здесь название песни

SomeGuy - здесь название песни

и так далее ...

1 Ответ

2 голосов
/ 09 мая 2020

Для игнорирования вам нужно использовать re.I или re.IGNORECASE

Попробуйте использовать этот код:

import re

regexes = {
    r'\s(\(|\[)(.*?)Mix(.*?)(\)|\])' : r"",
    r'\s(\(|\[)(.*?)Version(.*?)(\)|\])' : r"",
    r'\s(\(|\[)(.*?)Remix(.*?)(\)|\])' : r"",
    r'\s(\(|\[)(.*?)Extended(.*?)(\)|\])' : r"",
    r'\s\(remix\)' : r"",
    r'\s\(original\)' : r"",
    r'\s\(intro\)' : r"",
}

def multi_replace(dict, text):
    for key, value in dict.items():
        p = re.compile(key, re.I)
        text = p.sub(value, text)
    return text

filename = "Testing (Intro)"

name = multi_replace(regexes, filename)

print(name)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...