Функция 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
Roma Pride, #Rocca: "Dovrebbe essere la festa di tutti. Al centro dovrebbe esserci la dignità di ogni essere umano e i diritti di ogni essere umano, non l'utero in affitto."
@UltimoraPolitics
Roma Pride, il presidente del #Lazio Francesco #Rocca a 'La Stampa': "Ma quale omofobia e ordini dall'alto, la revoca dipende solo dal fatto che hanno voluto strumentalizzare la nostra adesione facendola passare per un sostegno alla pratica dell'utero in affitto"…
Roma Pride, il presidente del #Lazio Francesco #Rocca a 'La Stampa': "Ma quale omofobia e ordini dall'alto, la revoca dipende solo dal fatto che hanno voluto strumentalizzare la nostra adesione facendola passare per un sostegno alla pratica dell'utero in affitto"
@UltimoraPolitics
Regione #Lazio, Francesco #Rocca: "La situazione finanziaria della Regione Lazio è drammatica. La Corte dei Conti ha osservato che il debito è molto pesante e parliamo di 22 miliardi."
@UltimoraPolitics
#Lazio
Francesco #Rocca si dimette dalla carica di Presidente nazionale della Croce Rossa Italiana e si mette a disposizione del centrodestra per la candidatura alle regionali: "Come esperto di sanità pubblica, penso di poter portare un valore aggiunto"
@UltimoraPolitics
Francesco #Rocca: "Ho incontrato Marcello #DeAngelis ieri, in tarda serata, e dopo lunghe riflessioni e un attento e sincero confronto, ho deciso di non revocargli la fiducia. Pertanto, manterrà la direzione della Comunicazione Istituzionale in Regione #Lazio"
@UltimoraPolitics
Polemiche per le dichiarazioni sulla strage di Bologna, Francesco #Rocca (Presidente #Lazio): "Vedrò Marcello #DeAngelis nel pomeriggio e sentirò cosa mi dirà: ha commesso un errore importante parlando in termini di certezza anche se a titolo personale. Farò le mie valutazioni ma lui non ha alcun ruolo politico nell'amministrazione regionale. Giorgia #Meloni mi ha chiesto di chiarire e certamente non era felice per quanto accaduto"
@UltimoraPolitics
#RegionaliLazio
Sondaggio Noto per Porta a Porta: il centrodestra punta alla doppietta alle regionali con #Rocca al 46% inseguito da #DAmato distante oltre 10 punti al 35.5%. #Bianchi terza al 16%.
@UltimoraPolitics
#RegionaliLazio
Sondaggio Quorum/YouTrend per Sky TG24: #Rocca primo anche per Quorum ma fermo al 41%, #DAmato insegue distante 8 punti. #Bianchi con il #M5S terza al 21%.
@UltimoraPolitics