Функция 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
🚨🔵 Shohei Ohtani NO lanzará en el Clásico Mundial de Béisbol, dijo el manager de los Dodgers, Dave Roberts, a los periodistas. Roberts agregó que fue decisión de Ohtani no lanzar.
🏆 Ohtani cerró de manera famosa la victoria del campeonato para Samurai Japan en el torneo de 2023, ponchando a su entonces compañero de equipo, Mike Trout.
#️⃣#Ohtani
🗞 | t.me/MLB_Daily
🏆🔵 ¡Shohei Ohtani ha ganado el premio Edgar Martinez al Bateador Designado Sobresaliente por QUINTA temporada consecutiva!
#️⃣#Ohtani
🗞 | t.me/MLB_Daily
👀 ¿Cuál es la reacción de Shohei Ohtani después del maratón de 18 entradas del Juego 3 de la Serie Mundial? No es diferente a la de cualquier otra persona...
😪 "Quiero ir a dormir lo antes posible", dijo Ohtani a Tom Verducci de Fox Sports a través de un intérprete, "para poder prepararme."
Después de su noche histórica en el plato y la legendaria victoria de los Dodgers, Ohtani está programado para lanzar en el Juego 4.
#️⃣#PlayOffs25#Ohtani
🗞 | t.me/MLB_Daily
🔝🔵 Desde 2021, Shohei Ohtani ha sido seleccionado para 8 Equipos All-MLB (6 Primer Equipo, 2 Segundo Equipo)
Eso es la mayor cantidad de selecciones para Equipos All-MLB EN LA HISTORIA 😳
#️⃣#Ohtani#Stats#MLBHistory
🗞 | t.me/MLB_Daily
👀🔵 Línea final de Shohei Ohtani en el Juego 3 de la Serie Mundial:
Doble
Jonrón
Doble
Jonrón
Base por bolas intencional
Base por bolas intencional
Base por bolas intencional
Base por bolas intencional
Base por bolas
🤯 Estableció un nuevo récord de veces en base en un juego en la historia de los playoffs, y empató un récord general de la MLB al llegar a base 9 veces, algo que no se había hecho desde 1942.
#️⃣#Ohtani#Stats#PlayOffs25#MLBHistory
🗞 | t.me/MLB_Daily