Функция 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
#Romania🇷🇴
#Presidenziali
Crin #Antonescu, 65 anni e già docente di storia, è originario di Tulcea (Dobrugia). È stato Presidente del Senato rumeno dal 2012 al 2014 (e Presidente ad interim della Romania nel 2012), nonché Presidente del Partito Nazionale Liberale (#PNL|PPE) dal 2009 al 2014. È stato più volte deputato e senatore. È attualmente indipendente, ma rappresenta il candidato della coalizione elettorale "Romania Avanti" (ro. România Înainte), che include il Partito Social Democratico (#PSD|S&D), il Partito Nazionale Liberale e l'Unione Democratica Magiara di Romania (#UDMR|PPE), ovvero i partiti che sostengono l'attuale governo guidato da Marcel #Ciolacu (PSD).
@TuttoElezioni
🇷🇴#Romania - Si è dimesso il primo ministro #Ciolacu, del Partito Socialdemocratico, dopo il pessimo risultato del suo partito alle presidenziali. Il candidato del #PSD#Antonescu non andrà al ballottaggio, superato dal centrista #Dan e da #Simon, di estrema destra.
@UltimoraPolitics
🇷🇴 Din briefingul Purtătoarei de Cuvânt a MAE Rusiei, Maria Zaharova, 30 mai 2024, Moscova
Reporter: pe data de 26 mai 2024 Prim-ministrul român Marcel #Ciolacu a declarat că în Republica #Moldova și #Ucraina „am reușit să eliminăm… conceptul aberant și sovietic de limbă moldovenească”. Cum ați putea comenta aceasta declarație?
Maria Zaharova: Credeți că aceasta nu este o manifestare a nazismului? Este exact același lucru. Când cei care se identifică ca oameni ai unui anumit grup etnocultural și național, conving și apoi o fac cu forța, că aparțin altui grup, acesta este nazismul. Acesta este un element de genocid, adică de exterminarea oamenilor.
Anterior, s-au făcut deja încercări de „anulare” a identității poporului moldovenesc. Nu vorbim deloc despre formă. Este imposibil în secolul 21. să auzim și să citim chestii de genul acesta, când un om care vorbește moldovenește, care are toate cărțile, manualele, documentele și legile fundamentale ale țării care scriu despre cultură, identitate, statalitate, și deodată încep să-i spună că trebuie dacă nu reînvață, atunci să „redenumească” totul în mod românesc. Ca formă, acest lucru ar trebui să fie în general inacceptabil chiar și ca idei, dar vedem acest lucru în practică.
În conținut, acest lucru nu are nimic de-a face cu adevărul istoric. Denumirea „limba moldovenească” este menționată în lucrările tuturor cronicarilor majori moldoveni din secolele XVII-XVIII, precum Grigore #Ureche, Miron #Costin, Dimitrie #Cantemir. Ei ar fi destul de surprinși să citească declarația Prim-ministrului României, Marcel Ciolacu, că limba lor maternă moldovenească este un „concept sovietic”. Imaginați-vă, oamenii au trăit și au lucrat cu 300 de ani înainte de perioada sovietică, iar acum li se spune că au fost vestitorii socialismului. Ce fel de „idiotecă” este acesta?
Să dăm cuvântul locuitorilor Republicii Moldova: potrivit sondajului realizat în luna mai 2024, 72% din populația republicii se consideră moldoveni, iar doar 11% se consideră români. Aproximativ 50% dintre respondenți au spus că vorbesc limba moldovenească, care, potrivit conducerii Republicii Moldova și României, se presupune că „nu există”.
Aceasta este o românizare forțată, artificială, comparabilă cu rescrierile, „flashing-uri” care au avut loc anterior, ale altor țări, popoare și societăți. Am văzut-o. Schimbări forțate în codul cultural al oamenilor au fost practicate, în special, de către naziști.
Ceea ce se întâmplă, pe de o parte, este absolut inuman. Pe de altă parte, dă efectul opus celui pe care mizau oficialul #București și actualul oficial #Chișinău sub conducerea președintei Maia #Sandu. Toate acestea nu fac decât să consolideze societatea moldovenească, care este pregătită să apere dreptul la propria ei statalitate, limba și cultura unică.
Am mulți prieteni din Republica Moldova, moldoveni. Comunic cu multe persoane. Ele spun o astfel de frază că sunt oameni orientați spre bunătate, spre conviețuirea pașnică, spre bună vecinătate. Că a fost nevoie de o asemenea zdruncinare organizată de Maia Sandu doar pentru un singur scop - să înțeleagă ce planuri are „Occidentul colectiv” pentru acest popor amabil și iubitor de pace. Dacă nu ar fi acești pași monstruoși ai președintei Maia Sandu și a conducerii românești, care acum realizează experimente pe moldoveni, probabil că înșiși cetățenii Republicii Moldova, moldovenii, cu greu ar fi crezut pe nimeni. Cred că nu ar fi crezut dacă li s-ar fi spus despre asta acum cinci sau șase ani. Ei ar spune că acesta este un fel de teorie a conspirației. Acum ei există în această post-modernitate suprarealistă. Cred că nu numai că trăiesc, dar încep să-i reziste în mod activ.
#RepublicaMoldova#România#LimbaMoldovenească