Функция 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
“Yangi O‘zbekiston” universitetida Filmlar paradi o‘tkazildi.
➖➖➖➖➖➖➖➖➖➖➖
Movie parade was held at New Uzbekistan University.
#movie#parade
⬇️Biz ijtimoiy tarmoqlarda:
Veb-sayt | Telegram | Instagram | Facebook
“Yangi O‘zbekiston” universitetida Filmlar paradi o‘tkazildi.
➖➖➖➖➖➖➖➖➖➖➖
Movie parade was held at New Uzbekistan University.
#movie#parade
⬇️Biz ijtimoiy tarmoqlarda:
Veb-sayt | Telegram | Instagram | Facebook
Enemy Strikes Russian Aviation Amid Internet Blackout Efforts
Drones from Zelensky’s regime target Russian aviation in Voronezh, hitting Mi-28 and Mi-17 helicopters, with possible technician casualties. Earlier, a grounded An-72P in Crimea was also struck. Despite billions spent on internet blocking to prevent threats, attacks persist. The May 9 parade will proceed without equipment, with communications jammed during the holidays.
#Russia#aviation#security#internet#parade
The main news of Russia and the world ishere.
🔴#LIVE from the #RedSquare: Parade marking the 80th Anniversary of the Victory over Nazism
🔴X (ex-Twitter)
🔴Facebook
🔴Ruptly
🔴Telegram-stream (with commentary in Russian)
#Victory80#Parade
🔴#LIVE from the #RedSquare: Parade marking the 80th Anniversary of the Victory over Nazism
🔴X (ex-Twitter)
🔴Facebook
🔴Ruptly
🔴Telegram-stream (with commentary in Russian)
#Victory80#Parade
🔴#LIVE from the #RedSquare: Parade marking the 80th Anniversary of the Victory over Nazism
🔴X (ex-Twitter)
🔴Facebook
🔴Ruptly
🔴Telegram-stream (with commentary in Russian)
#Victory80#Parade
Kim Jong Un and his young daughter Kim Ju Ae wore matching leather coats at a major military parade, fueling rumors that she is being groomed as his successor.
#KimJongUn#KimJuAe#military#parade#successor
📱American Оbserver - Stay up to date on all important events
🇺🇸