Функция 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
Кинопленка, найденная Станиславом Феофановым в городе Себеже Псковской области.
На мой взгляд, такие личные съемки повседневности в Советском Союзе являются редкими и бесценными историческими документами.
"... В одном из полусгоревших домов я нашел несколько бобин с 8-мм пленкой. Глянул на свет - вроде бы не кино, а что-то документальное. Вернулся в Москву, оцифровал пленку. Оказалось, что часть записей действительно посвящена Себежу, но есть там и Москва и Воронеж. В данном конкретном ролике я собрал себежские эпизоды. Судя по записям на бобине - это где-то конец 60-х годов/начало 70-х годов..."#psk
Подкаст «Земля» про Псковщину и Великие Луки.
В этом выпуске вы услышите про мое знакомство с Псковом, Изборском и Печорами. Историю перипетий формирования современных границ области и находки в густых лесах Псковщины.
Рассказ Ромы Шмелева про Великие Луки и западный край России, находящийся на рубеже не только государственных границ, но и границ человеческой мысли.
Apple Podcasts
Яндекс.Музыка
Google Podcasts
Spotify
Фильм про Себеж https://youtu.be/x0ImFhbtz2o
#psk
Всем привет, меня зовут Андрей Першин. Это мой телеграм-канал, где я рассказываю про все, что мне интересно. Мое творчество — это фотографии, анимация и подкаст.
Я родился в Удмуртии, жил в Ижевске, Казани и Москве, в начале 2017 года уехал из страны и жил в Латвии, с февраля 2023 года живу в Берлине.
Для удобства отметил почти все посты тегами, можете выбрать, что вам интересно. Спасибо, что читаете, смотрите, слушаете и поддерживаете.
#de Германия
#ru Россия
#lv Латвия
#ud Удмуртия
#mo Москва и область
#ua Украина
#fr Франция
#iz Ижевск
#riga
#me Личное, мысли
#art Творчество
#pod Подкаст
#bam Байкало-Амурская магистраль
#vld Владивосток
#psk Псков
#kazan Казань
#nn Нижний Новгород
#smol Смоленск
#ot Другое