Функция 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
Range Rover шикарный и пижонский. На нем иногда выезжают на бездорожье, но это выглядит странно.
У LR есть совсем другая машина - Land Rover Defender Octa. 4,4 битурбо на 600+ лс, полный привод, гидравлическая подвеска, разгон до сотни за 4 секунды. В этом году на нем LR выиграл ралли Париж-Даккар.
Внутри - утилитарная роскошь. Если бы не цена «от 160 тыс долл» и расход топлива, Octa была бы лучшей машиной на свете.
Согласен - 👍
Не уверен - 🤔
#lr
Land Rover в этом году вернулся в ралли Париж-Дакар, мы недавно писали об этом. Сейчас позади уже 8 этапов, LR держит первые два места в группе, на третьем Toyota.
Land Rover едет на Defender Dakar D7X-R, по сути это серийный Defender OCTA и этот авто заслуживает описания. 4,4 л бензиновый битурбо, 630 лс и 750 Нм, увеличенный дорожный просвет и при этом 3,8 секунды до сотни.
OCTA уже назван в Великобритании внедорожником года, после победы в Дакаре культовый статус ему обеспечен. Минусов нет, кроме расхода топлива и цены - 160-170 тыс долл в стране производства.
Огонь - 👍
Непонятно зачем - 👎
#lr
#Elezioni#Francia#Presidenziali
Spaccatura nei #LR|EPP: la sezione giovanile del partito annuncia che non seguirà l'endorsement fatto dai Repubblicani a Macron e voterà scheda bianca.
@UltimoraPolitics
#Francia#AN
Con 331 voti favorevoli, l'Assemblea Nazionale approva la mozione di sfiducia nei confronti del Primo Ministro Michel #Barnier (#LR|EPP).
Video di LCP.
@OsservatorioEsteri
#Francia
Il Presidente dei #LR|EPP Christian #Jacob ha annunciato che non si ricandiderà nel suo seggio di Seine-et-Marne, lasciando l'Assemblea Nazionale dopo 27 anni dalla sua prima elezione.
@UltimoraPolitics
#Francia
Senatrice Agnés #Evren (#LR|EPP): “Destituiremo Eric #Ciotti nella giornata di oggi. Posso dirvi che, a partire dalle 15, non sarà più il leader dei Repubblicani”.
@OsservatorioEsteri