Функция 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
🇨🇳Pékin durcit le ton
🔴La #Chine avertit qu’elle ripostera si le projet de loi sur l’« accélération industrielle » est adopté sans modification. En cause, des règles jugées pénalisantes pour ses entreprises, notamment en ce qui concerne l’accès aux financements publics.
🔴Le texte prévoit d’imposer des critères stricts d’origine locale dans plusieurs secteurs clés comme l’automobile, les batteries, le solaire ou les matières premières critiques. Une mesure qui vise à renforcer la production sur le continent, mais que #Pékin considère comme une restriction aux investissements étrangers.
RT en français • Osez questionner !
⏺Le défilé de la Victoire, qui s'est tenu aujourd'hui à #Pékin à l'occasion du 80e anniversaire de la victoire dans la Seconde Guerre mondiale ainsi que sur le militarisme japonais, a été un événement grandiose non seulement pour la #Chine, mais aussi pour le monde entier.
Daria Vaganova, notre envoyée spéciale, était sur place et va nous partager les détails.
RT en français • Osez questionner !
La coopération entre la #Russie et la #Chine s'est activement développée, #Pékin est désormais l'un des partenaires les plus fiables de #Moscou. L'économie, la science, l'espace, la défense : ce ne sont que quelques-uns des domaines dans lesquels une interaction bilatérale productive se met en place.
Pour creuser le sujet, nous recevons Xavier Moreau, directeur de Stratpol, depuis Moscou.
RT en français • Osez questionner !
🇨🇳🚙 Le plus grand salon automobile au monde a ouvert à Pékin. Comme cela a été noté par TASS, 1.451 modèles de voitures sont présentés, dont 181 pour la première fois.
#pékin#salon#voitures
La coopération entre la #Russie et la #Chine s'est activement développée, #Pékin est désormais l'un des partenaires les plus fiables de #Moscou. L'économie, la science, l'espace, la défense : ce ne sont que quelques-uns des domaines dans lesquels une interaction bilatérale productive se met en place.
Pour creuser le sujet, nous recevons Xavier Moreau, directeur de Stratpol, depuis Moscou.
RT en français • Osez questionner !
🧧La marche du Régiment des Immortels a lieu à l’ambassade de Russie à #Pékin.
Le cortège est mené par l'ambassadeur de #Russie en #Chine, Igor #Morgoulov, et l'actrice Maria #Kojevnikova.
RT en français • Osez questionner !