Функция 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
🔴 MEETING EXCEPTIONNEL À LILLE !
Jean-Luc Mélenchon sera à #Lille ce jeudi au grand palais à 19h pour soutenir la liste insoumise, et surtout écologiste et populaire !
✊ Dimanche, nous pouvons l’emporter ! Soyons nombreux et nombreuses !
Ma publication à retrouver sur :
👉Twitter
👉Instagram
👉Facebook
👉Tik tok
➡️ Rejoignez le canal telegram : https://t.me/Lahouaria_Addouche
⚽️🇪🇺Champions
Lille 1-0 Real Madrid#Champions#Lille#RealMadrid
El Real Madrid cayó por primera vez en la temporada y segunda en el año. Desde el 18 de enero, en aquella noche copera del Metropolitano. Puede que el derbi dejase tocado al equipo de Ancelotti, que al menos en los últimos minutos pudo igualar un partido plano. Tres paradas de reflejos de Chevalier evitaron que el Madrid igualara en una reacción muy tardía. El Lille aprovechó los desajustes blancos y conquistó una victoria de enorme prestigio.
https://www.marca.com/futbol/champions-league/cronica/2024/10/02/66fda5bcca4741d9138b4572.html
🏆@Info288_deportes
⚽️🇪🇺Champions
Atlético 1-3 Lille#Champions#Atlético#Lille
El Atlético de Madrid ha perdido este miércoles por 1-3 frente al LOSC Lille en la jornada 3 de la fase de liga en la Champions League, a causa sobre todo de un polémico penalti encajado a cuarto de hora de la conclusión, en un partido disputado en el Riyadh Air Metropolitano y tras el cual los colchoneros se han complicado su futuro inmediato en este torneo.
https://www.europapress.es/deportes/futbol-00162/noticia-atletico-madrid-pierde-lille-complica-futuro-champions-league-20241023230223.html
🏆@Info288_deportes
Lille y Stade Brestois se clasificaron a la próxima edición de la UCL🇪🇺
El Lille llegaron hasta los octavos de final de la UCL en la temporada 21/22.
Mientras que el Brest jugará por primera la UCL en su historia tras una increíble temporada en la Ligue 1
@Fut_planet⚜️#UCL🇪🇺#Lille🇫🇷
#Brest🇫🇷
France Ligue 1🇫🇷
2026-05-03 13:00 UTC
Lille vs. Le Havre
Predicted outcome: Lille❌
Predicted score: 1:0
Actual: Draw 1:1
#Lille#LEHavre
2026-05-03 15:15 UTC
Strasbourg vs. Toulouse
Predicted outcome: Strasbourg❌
Predicted score: 2:1
Actual: Toulouse 1:2
#Strasbourg#Toulouse
2026-05-03 15:15 UTC
Auxerre vs. Angers
Predicted outcome: Auxerre✅
Predicted score: 2:1
Actual: Auxerre 3:1
#Auxerre#Angers
2026-05-03 15:15 UTC
Paris FC vs. Stade Brestois 29
Predicted outcome: Paris FC✅
Predicted score: 2:1
Actual: Paris FC 4:0
#ParisFC#StadeBrestois29
2026-05-03 18:45 UTC
Lyon vs. Rennes
Predicted outcome: Lyon✅
Predicted score: 3:2
Actual: Lyon 4:2
#Lyon#Rennes
#Football#FranceLigue1