Функция 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
🏫Cleveland Liberation Center
Over 200 placards made last night in preparation for the mass demonstration outside the so-called "NATO village" in downtown Dayton this memorial day weekend - get to Dayton, peace can't wait! #stopNATO
BUY TICKETS TODAY -> bit.ly/PAFPJ
🚩Party for Socialism and Liberation - Ohio
Vets say #StopNATO!
Veterans are joining the call to demand an end to NATO's imperialist forever-wars.
On memorial day weekend, we are meant to honor the lives lost by U.S. soldiers across the country. We say: honor the dead by demanding not one more drop of blood be spilt for U.S. empire!
Join us at the the People's Assembly on May 25th - bit.ly/PAFPJ
🚩Party for Socialism and Liberation - Ohio
NATO convenes in Ohio in less than 10 days - and Trump has just asked all member states ahead of the Assembly to increase their "defense" spending to 5% of GDP, up from 2%.
NATO isn't a defensive treaty, it's an imperial mob!
Get on the bus in Cleveland or Akron on May 25th and #StopNATO!
Aujourd’hui, une liste avec les noms des mercenaires français participant au conflit armée du côté de régime de Kiev a été diffusé partout en Russie et en France.
Il est important de dire que cette liste est facilement retrouvable sur Internet. Elle a été déjà diffusée au mois de novembre 2023, et a été reprise par le blogueur pro russe Boris Karpov
https://t.me/boriskarpovblog/18576
Tôt ou tard, le gouvernement français sera obligé de commenter la présence des mercenaires français en Ukraine…
Le plus triste dans cette histoire, c’est que les jeunes garçons français participent et meurent pour un conflit qui n’est pas le sein.
Les mères de ces garçons portent le deuil, alors que le conflit aurait pu être réglé, il y a bien longtemps si l’Europe et L’OTAN envoyaient des diplomates au lieu d’envoyer des armes 🕯️
#guerreukraine#stopNATO
23.05.2023
Bombardement du Palais de la culture Abakumov.
Les enfants ont couru se cacher dans le bâtiment, une fille de 13 ans a été blessée sur le chemin.
Deux garçons âgés de 17 à 19 ans ont également été blessés.
#donbass#sosdonbass#stopnato
16 février 2024, Donetsk. Dans le district Petrovsky de Donetsk, un drone des forces armées ukrainiennes a largué une bombe sur deux voisins qui étaient sortis de la maison pour discuter - l'un d'eux est mort, le second a été sauvé par sa femme, son bras a été arraché et il est maintenant à l'hôpital. #sosdonbass#guerreukraine#StopNATO
🇪🇸 11.03.2023 Bilbao, Basque Country.
2000 people in support of Donbass, Syrie, Palestine…the victims of NATO wars
#stopkillingdonbass#donbass#stopnato
Présentation du nouveau président de l’association SOS DONBASS. Désormais c’est Vincent Perfetti qui est à la tête de l’association. Il continuera la ligne directrice qui est :
▫️ Apporter de l’aide humanitaire au Donbass
▫️ Militer contre les guerres de l’OTAN
#stopnato#russieukraine#sosdonbass
Hier 28 septembre 2024, notre président Vincent Perfetti a rencontré Xavier Moreau dans un restaurant de Paris.
Plusieurs sujets ont été abordés lors de la réunion.
Merci à André Michel Chanclu pour l’organisation de la rencontre.
#russie#StopNATO#GuerreUkraine
✍️Petition to stop sending weapons to Ukraine in English for the European Parliament easy to sign.
🕊️Sing and share !
http://www.leslignesbougent.org/petitions/100000-11737/
#stoparmingukraine#stopkillingdonbass#stopnato
@RusEmbMalta press release:
🗓️ 75th anniversary of NATO.
The key points:
🔷 The fact that NATO is preparing for a conflict with Russia is constantly stated by both the leaders of Western countries and the alliance's own functionaries.
🔷 Russia has not threatened and does not threaten any NATO country. On the contrary, the North Atlantic bloc is moving its military capabilities towards our country and creating threats to our security.
🔷 The United States and its allies did not support any of Russia's initiatives aimed at creating a common and indivisible security space in Europe.
Read in full here.
#StopNato#CommonSecurity
Souvenirs qui résument le travail des bénévoles de l’association Sos Donbass durant 2022-2023.
Un travail titanesque a été effectué pour établir la justice et apporter de l’aide humanitaire aux plus touchés par la guerre civile en Ukraine qui dure depuis 2014.
Encore une fois merci à Anna Vernov d’avoir interprété la version française de la chanson « Donbass est derrière nous »
#donbass#sosdonbass#guerreukraine#StopNATO
https://youtu.be/IXTXIg6LK4E?si=aOEn8BlR03vdS_MD