Функция 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
#Francia
François #Bayrou (#MoDem|RE): "Prossimo Premier? Si sa solo che sarà una donna, ma Macron può cambiare idea all'ultimo. Se farò parte del prossimo governo? No, alla mia età non voglio avere incarichi ministeriali."
@UltimoraPolitics
#Francia
François #Bayrou (#MoDem|RE): "Il programma di Jean-Luc #Mélenchon è pericoloso. Sulla NATO, sul burkini, le scuole private, su Frontex e su tanto altro."
@UltimoraPolitics
#Francia#AN
Con 364 voti contrari e 194 voti favorevoli, l'Assemblea Nazionale non approva la mozione di fiducia nei confronti del Primo Ministro François #Bayrou (#MoDem|RE).
Il Primo Ministro consegnerà le proprie dimissioni al Presidente Emmanuel #Macron (#Renaissance|RE).
@OsservatorioEsteri
#Francia
Il Presidente Emmanuel #Macron (#Renaissance|RE) ha nominato il leader di #MoDem|RE François #Bayrou come nuovo Primo Ministro.
L'ultima incarico governativo di Bayrou risale al 2017, quando fu Ministro della Giustizia durante il governo #Philippe.
@OsservatorioEsteri
#Francia
I leader di #LREM|RE (Stanislas #Guerini), #MoDem|RE (François #Bayrou) e #Horizons|Centro-destra (Édouard #Philippe) hanno annunciato la creazione di una confederazione in vista delle elezioni legislative. L'attuale Presidente dell'Assemblea nazionale Richard #Ferrand (LREM) farà da Leader, Bayrou e Philippe saranno Vicepresidenti, infine Guerini farà da Segretario Generale.
@UltimoraPolitics