Функция 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
It's #EarthHour tonight! Don’t forget to turn off all your lights at 8.30pm today. And because we only have one earth, let’s ensure we use our resources wisely. Read more here: earthhour.org
#ClimateActionSG
Here are some ideas for you to be a part of #EarthHour🌏✨ However you spend it, every small action can make a difference and help #ShapeOurFuture!
Share this with your loved ones 💚
Switch off for #EarthHour at 8:30pm!
But let's not stop there. Let this yearly reminder inspire us to continue making sustainable choices. Your everyday choices matter more than you might think!
Small steps such as adopting energy-saving habits and recycling right can make a difference. Imagine these small acts being amplified by millions worldwide. 🌍💚
#EnergyEfficiency#ReduceReuseRecycle#RecycleRight
Earth Hour 2022 is happening tomorrow, 26 Mar, at 8:30pm! Don’t forget to switch off your lights with the rest of the world.
The iconic act highlights how #EveryActionCounts when it comes to protecting our environment. Check out how you can go beyond the hour to save our planet: www.earthhour.org/take-part/beyond-the-hour
#EarthHour#EarthHour2022
⏰ 29 марта - #Час_Земли!
🌎 Традиционно в последнюю субботу первого месяца весны Беларусь присоединяется к международной экологической акции – #Час_Земли! 🇧🇾, в 17-й раз вместе с миллионами людей по всему миру выключим свет на один час, чтобы задуматься о будущем нашей планеты. 🌍
💡 Акция направлена на то, чтобы акцентировать внимание на вопросах климатических изменений, экономии энергии и экологической безопасности. Это не просто формальность, а уникальная возможность внести свой вклад! 💚
⏰ Присоединяйтесь к #EarthHour:
29 марта с 20:30 до 21:30 выключите освещение и другие не первостепенные электроприборы в знак поддержки ответственного отношения к природе.
🌿 Сделаем нашу планету лучше вместе!
#Беларусь#БелГИЭ#Час_Земли#Экология#СохранимПланету#БерегитеПрироду
🌊 Всемирный день воды: общие течения перемен 🌊
Сегодня, когда мы отмечаем Всемирный день воды и готовимся к Часу Земли, стоит вспомнить, что изменение климата не знает границ. Акватории, соединяющие Россию и Великобританию — от Балтийского моря до Арктики — молча свидетельствуют о нашей общей уязвимости.
Знаете ли вы, что уровень воды в Мировом океане 📈 растет на 3,7 мм в год? Это угрожает как Санкт-Петербургу, так и Лондону. Таяние арктических льдов одинаково тревожит ученых всего мира.
Британцы и россияне оставили богатое научное наследие в области исследования морей. От экспедиций 🚢 Джеймса Кука до работ Степана Макарова — мы вместе создавали принципы современной океанологии. В сегодняшних условиях именно забота о водных ресурсах может стать той платформой, где диалог все еще возможен.
Молодые исследователи по обе стороны глобального диалога понимают: защита водных ресурсов — это не политический вопрос, а ❕необходимость для выживания человечества. В 20:30 сегодня миллионы людей по всему миру выключат свет на #EarthHour. Это символический жест, напоминающий, что перед лицом климатического кризиса мы все в одной лодке.
🔗 Узнайте больше о свежых исследованиях, связанных с возможными последствиями изменения климата в Арктике: https://t.me/ecobellona/2028 и https://www.youtube.com/watch?v=Rn-Mk3_ybto&feature=youtu.be
#WorldWaterDay#ЧасЗемли#EarthHour#КлиматическиеДействия#ClimateAction