Функция 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
🇩🇪#Germania — trovato l’accordo tra #SPD e #CDU. Il 16 dicembre ci sarà il voto di fiducia al cancelliere Scholz, che farà cadere ufficialmente il governo, attualmente retto solo da socialdemocratici e verdi. Dopodiché elezioni nazionali il 23 febbraio.
@UltimoraPolitics
#Elezioni#Germania#Regionali#SchleswigHolstein
Exit poll: la #CDU|EPP avrebbe vinto 34 seggi, solo uno in meno della maggioranza assoluta.
@UltimoraPolitics
#Europa#UE
Ursula #VonDerLeyen (#CDU|EPP): "La guerra di aggressione di Putin contro l'Ucraina evoca il motivo per cui domani celebriamo la Giornata dell'Europa. 72 anni fa nasceva la nostra pacifica e prospera Europa. Oggi siamo uniti e forti per gli ucraini che desiderano un futuro in libertà. Un futuro in Europa."
@UltimoraPolitics
🇩🇪 #Germania - Si è votato per il rinnovo del parlamento in Baden-Württemberg, ecco gli exit poll: i #Verdi in testa al 31-32%, seguiti da #CDU al 30%. #AfD al 18%, raddoppiando il risultato del 2021. @UltimoraPolitics24
🇩🇪#Germania - Si è votato per il rinnovo del parlamento in Baden-Württemberg, ecco gli exit poll: i #Verdi in testa al 31-32%, seguiti da #CDU al 30%. #AfD al 18%, raddoppiando il risultato del 2021.
@UltimoraPolitics24
Elezioni #Germania, nel parlamento federale 19 deputati nati in Germania dai genitori di cittadinanza turca (1 in più rispetto alla legislatura precedente); con #SPD, #DieLinke, #CDU, #CSU e #Grune.
#UE#Europa#EuroParlamento
Con 370 voti favorevoli, 282 contrari e 36 astensioni, l'Europarlamento ha approvato la Commissione Europea di Ursula #VonDerLeyen (#CDU|EPP), che entrerà in carica il 1° dicembre.
@OsservatorioEsteri
#Elezioni#Germania#Regionali#SchleswigHolstein
Exit poll di Infratest dimap:
Tasso di approvazione del governo uscente (#CDU-#Grüne-#FDP): 75%
@UltimoraPolitics
🇩🇪 #Germania - Oggi si insedia il governo #Merz, frutto di un alleanza tra #CDU (cdx, che ha vinto le elezioni) e #SPD (csx). La spartizione dei ministeri comprende: interni e esteri alla #CDU, difesa (con l'unica conferma il ministro uscente #Pistorius) e…
🇩🇪#Germania - Oggi si insedia il governo #Merz, frutto di un alleanza tra #CDU (cdx, che ha vinto le elezioni) e #SPD (csx). La spartizione dei ministeri comprende: interni e esteri alla #CDU, difesa (con l'unica conferma il ministro uscente #Pistorius) e finanze all'#SPD.
@UltimoraPolitics
#Europa#UE
Ursula #VonDerLeyen (#CDU|EPP): "Congratulazioni Kalush Orchestra e Ucraina per la vittoria dell'#Eurovision. Stanotte la tua canzone ha conquistato il nostro cuore. Celebriamo la tua vittoria in tutto il mondo. L'UE è con te."
@UltimoraPolitics