Функция sub в regex может принимать функцию в качестве аргумента repl.
📄 Из документации:
If repl is a function, it is called for every non-overlapping occurrence of pattern. The function takes a single match object argument, and returns the replacement string.
То есть для каждого совпадения будет вызвана функция для вычисления замены вместо замены на одну и ту же строку для всех совпадений.
Иными словами, для замены разных совпадений на разные строки не потребуется запускать re.sub() много раз для каждой строки замены. Достаточно определить функцию, которая вернёт строку для каждого из совпадений.
Описание слишком запутанное🤔, давайте лучше рассмотрим на простом примере:
Создаем карту замены. То есть какие строки на какие требуется менять.
remap = {
'раз': '1',
'два': '2',
'три': '3',
'четыре': '4',
'пять': '5',
}
Пишем функцию поиска строки для замены. Единственным аргументом будет объект re.Match.
Используя данные этого объекта мы вычисляем замену on-the-fly!
def get_str(match: re.Match):
word = match.group(1)
return remap.get(word.lower()) or word
Пример текста.
text = '''Раз Два Три Четыре Пять
Вместе будем мы считать
Пять Четыре Три Два Раз
Мы считать научим вас
'''
Теперь запускаем re.sub и вместо строки замены (repl) подаём имя функции.
(Данный паттерн ищет отдельные слова в тексте)
>>> print(re.sub(r'(\w+)', get_str, text))
1 2 3 4 5
Вместе будем мы считать
5 4 3 2 1
Мы считать научим вас
Думаю, достаточно наглядно 🤓
#libs#regex
Ravi Shankar — The Sounds of India (Columbia Records, 1968)
#hindustani#raga#sitar#India
Культовый альбом Рави Шанкара, который представляет классическую музыку Северной Индии западному слушателю. В начале альбома Рави Шанкар дает определение раге на английском языке, а затем исполняет ряд композиций, сопровождая их пояснениями о том, как они устроены. Вопреки этому, музыка исполнена очень аутентично. Альбом был вдохновлен работами Али Акбара Кхана, известного исполнителя на сароде и преподавателя классической музыки Северной Индии, и спродюсирован Джорджем Авакяном, одним из продюссеров Майлза Дейвиса.
Spotify | AppleMusic
Banaras Baba & Kolkata Kid — From North to South (Epidemic Sound, 2021)
#hindustani#raga#sitar#India#Sweden
После многих лет изучения музыки Индостана, два шведских музыканта, мульти-инструменталист К.Г. Уэстман, он же Banaras Baba, и перкуссионист Хьюго Виден, он же Kolkata Kid, выпустили серию мини-альбомов, посвященных индийской классической музыке. Перед нами второй альбом из этой серии. Несмотря на то, что у музыкантов не было задачи смешивать разные музыкальные традиции, в их работах присутствуют западные инструменты и очень слышно влияние западной музыки.
Spotify | AppleMusic
Shujaat Khan & Katayoun Goudarzi — This Pale (Black Groove Music, 2021)
#hindustani#persian_classical#sitar#ney#tabla#Iran#India
Совместная работа ситариста Шуджаата Хусейна Хана и иранской вокалистки Катаюн Гударзи. За свою долгую карьеру Шуджаат выпустил более 60 альбомов. Одним из самых ярких моментов его карьеры стал альбом The Rain, записанный с индо-персидским ансамблем Ghazal. Пластинка была номинирован на премию Грэмми в 2004 году. На новой работе This Pale звуки ситара Хусейна Кхана, вокал Гударзи, най Шахо Андалиби и табла Шарика Мустафы вдохнули новую жизнь в шесть стихотворений Руми, персидского поэт-суфия XIII века.
Spotify | AppleMusic
Various Artists — Folk Music of Pakistan (Folkways Records, 1951)
#traditional#alghoza#bansuri#bagpipe#clarinet#dholak#dilo#duff#ghatam#mandolin#sarinda#sitar#tabla#tambura#Bangladesh#Pakistan
Пакистан образовался в 1947 году после разделения Британской Индии на два государстваː индуистское, Индийский Союз, и мусульманское, Доминион Пакистан. Бангладеш, ранее известный как Восточный Пакситан, приобрёл автономность в 1971 году в результате войны за независимость.
Композиции из разных регионов обеих современных стран представлены на этой записи 1951 года. Например, на ней можно услышать песню бангладешских лодочников «бхатиали» (ভাটিয়ালি) или пуштунскую любовную песню из Хайбер-Пахтунхва.
Важно отметить, что некоторые названия, упомянутые в названиях песен, изменились с момента создания этих записей. Например, провинция Хайбер-Пахтунхва (Khyber Pakhtunkhwa) в 1951 году носила имя Северо-Западная пограничная провинция (Northwest Frontier Province).
🔗Spotify | AppleMusic