Функция 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
RisingOS
Xiaomi 12T PRO|Redmi K50 Ultra (Diting)
By:@Teammex_XDA
Version:4.2-Kailash
Download | Changelogs | Screenshots
Device changelog:
- Fixed several bugs
- Fixed some media codecs now screenrecord works
- Improved performance
- Last RisingOS 4.2 source
#risinginyourarea#UDC
Credits to@Mohammadnt96 for some help :D
Follow@xiaomi_12tpro_updates
Join@xiaomi_12tpro_chat
#Italia
Nuovi dubbi sulla petizione dei sindaci per Draghi, dopo il sindaco di Latina smentisce di aver firmato anche il sindaco di Palermo #Lagalla (#UdC|EPP).
@UltimoraPolitics
#Italia
Paola #Binetti (#UdC|EPP): "Sul doppio cognome dico agli amici cattolici di stare tranquilli, non è un attentato alla famiglia, è semplicemente il riconoscimento del diritto di tutti, bambini in primis."
@UltimoraPolitics
#Italia ❗️ Frosinone, sono tre i candidati impresentabili. Tra di loro anche il candidato sindaco Mauro #Vicano, sostenuto da #Azione e #UdC. @UltimoraPolitics
#Italia
❗️ Frosinone, sono tre i candidati impresentabili. Tra di loro anche il candidato sindaco Mauro #Vicano, sostenuto da #Azione e #UdC.
@UltimoraPolitics
В Китае спрятали энергию под воду
🇨🇳 Китай снова удивил: у побережья Шанхая заработал первый в мире подводный центр обработки данных UDC Lin-gang 👨👩👧👦 который дышит ветром и охлаждается водой.
Обычные центры обработки данных (ЦОДы) тратят колоссальное количество энергии и воды на охлаждение серверов — некоторые потребляют до 19 миллионов литров в день.💦 Но под водой все иначе: температура морской среды естественно охлаждает оборудование. Благодаря этому китайский проект сократил энергопотребление до 23% 📉 и полностью отказался от пресной воды.
Более 95% энергии объект получает от офшорных ветрогенераторов👨👩👧👦👨👩👧👦👨👩👧👦 Итог — сверхэффективный центр с показателем энергоэффективности (PUE) всего 1,15!
#Китай#ЦОД#ветропарк#UDC
🇨🇭 La #Svizzera voterà a giugno su un referendum che vieta di superare i 10 milioni di abitanti prima del 2050. L’iniziativa dell’#UDC (destra) prevede restrizioni su asilo e ricongiungimento familiare se si superano i 9,5 milioni e possibili limiti ai trattati internazionali, come l’accordo UE sulla libera circolazione, se si superano i 10 milioni.
¡New build available!
#A14#RisingOS
Xiaomi 12T Pro / Redmi K50 Ultra (diting)
Maintainer:@TeamMEX_XDA (Kισżż)
Version:5.2.1-Lyonesse
Download | Changelogs | Screenshots
Device Changelog:
◦ Enable Updater app
◦ Enable Lawnchair and Pixel launcher
◦ fix ims crash (?)
◦ improve system performance
◦ more bugfixes
◦ Enable visual eq on dolby
'#risinginyourarea' '#UDC'
If you like my work and want to support it please consider making a donation this helps with server costs.
Donate PayPal
¡New build available!
#A14#RisingOS
Xiaomi 12T Pro / Redmi K50 Ultra (diting)
Maintainer:@TeamMEX_XDA (Kισżż)
Version:5.1-Lyonesse
Download | Changelogs | Screenshots
Device Changelog:
◦ Sync with last rising 5.1 source
◦ Update Yuki kernel
'#risinginyourarea' '#UDC'
If you like my work and want to support it please consider making a donation this helps with server costs.
Donate PayPal