Функция 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
🗽 Los jugadores de los Yankees quieren usar uniformes alternativos en partidos de visitante. ¿Deberían los Yankees comenzar a usar jerseys alternativos por primera vez en la historia de la franquicia?
#Yankees
🗞 | t.me/MLB_Daily
🗽 La camiseta de práctica de bateo azul marino de los Yankees ha sido aprobada por la MLB para ser usada en partidos, ya que forma parte de su conjunto de uniformes oficiales. Aún está por determinar si realmente la usarán en un partido.
#Yankees
🗞 | t.me/MLB_Daily
🧢🗽 Una mirada a la nueva rotación proyectada para los Yankees en el Día de Apertura después de que, según se informa, adquirieran a Ryan Weathers de los Marlins.
📊 Proyecciones a través de FanGraphs
#️⃣#Yankees
🗞 | t.me/MLB_Daily
📊 Los dos mejores jugadores de posición y los dos mejores lanzadores por fWAR esta temporada son TODOS de los New York Yankees 🤯
#Stats#Yankees
🗞 | t.me/MLB_Daily
💥 Lourdes Gurriel Jr será el primer cubano en ver acción en el #OpeningDay.
👉 Enfrentará a los #Yankees y partirá en el 6to turno y LF.
@CirculodeEspera
🏴☠️🗽 Paul Skenes quiere jugar para los Yankees, le dijo uno de sus compañeros de los Pirates a @randarino. Según se informa, Skenes no tiene confianza en que los Pirates alguna vez ganen, y quiere ser cambiado mucho antes de que comience su agencia libre después de la temporada 2029.
🗞 Vía Tal'kin Baseball
#️⃣#Skenes#Yankees
🗞 | t.me/MLB_Daily
🗽🗽 Aaron Judge continúa grabando su nombre en la historia de los Yankees empatando a Derek Jeter, Robinson Canó, Jorge Posada y a Dave Winfield como los máximos ganadores de Bates de plata en la historia de la franquicia.
#️⃣#Yankees#Judge
🗞 | t.me/MLB_Daily
🗽🩸 Aroldis Chapman dice que se sintió irrespetado por los Yankees y que se retiraría antes de volver a jugar para ellos.
#️⃣#Yankees#Chapman
🗞 | t.me/MLB_Daily
🗽🗽 Los Yankees y Cody Bellinger llegaron a un acuerdo por cinco años y $162.5 millones, según fuentes de ESPN. Hay cláusulas de rescisión después de la segunda y tercera temporada, un bono de firma de $20 millones y una cláusula de no intercambio completa.
#️⃣#Yankees#Bellinger
🗞 | t.me/MLB_Daily
❌🗽 Según Jorge Castillo, se espera que Cody Bellinger opte por no continuar con su contrato con los Yankees y se convierta en agente libre.
#️⃣#Yankees#Bellinger
🗞 | t.me/MLB_Daily