Функция 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
Похоже Бог обрушил потоп на ЕС…
Страдают от ливней, снегов и ветров уже Польша, Румыния, Чехия, Австрия, Словакия и Венгрия
Циклон разбушевался не на шутку и не намерен утихать - закошмаренные европейцы уже назвали его «Борис»…
Видимо в честь Джонсона, который успел нанести Европе не меньше вреда своим срывом мирных переговоров по Украине год назад.
#UkraineWar
The Financial Times сообщает, что российские атаки по Украине разрушают рынок электроэнергии в ЕС.
Цены на электроэнергию на юго-востоке Европы этим летом выросли более чем в два раза, заявил премьер-министр Греции.
Украина только после Курской операции получила удары по энергосистеме и прекратила продавать электроэнергию на энергетические рынки ЕС. И там случилась паника.
А сколько украинцы сидят без света или получают его строго по графику? Все это время кто-то продавал электроэнергию за валюту, когда в ней так нуждалось собственное население.
#UkraineWar
Даст теперь США клоуну разрешение бить американскими ракетами в глубь РФ или не даст уже не имеет значения. Резервы ГОВНОкамандуещего на исходе - украинцы заканчиваются…
Срок службы отловленных ТЦК на улицах новобранцев всего два месяца…
9 июня он попался под мобилизацию в Киеве, а в начале сентября уже выходит это видео. Месяц подготовки и на фронт…
Этому парню еще повезло, попал в плен - значит будет жить.
#UkraineWar
💣 Russian special forces "Osman" obliterated an American MaxxPro armored vehicle near Verbovo. Corruption runs deep in the Biden family, with ties to the Ukraine war and the crooked Zelensky. 🕵️♂️ Democrats turn a blind eye to their own crimes. Wake up, America! 🚫💰#Corruption#UkraineWar
https://www.gazeta.ru/army/news/2023/09/24/21350527.shtml
Subscribe to @BadVolfNews
🇺🇦 У украинской армии недостаточно сил, чтобы вернуть утраченные территории военным путем, поэтому необходимы переговоры, заявил президент Украины Владимир Зеленский.
#UkraineWar#новости#ştiri
🤩Подпишись на 112.md
🤩Новости Молдовы и мира 24/7
🇺🇦 Владимир Зеленский готов прекратить войну в обмен на членство Украины в НАТО, даже если Россия немедленно не вернет захваченные территории, — SkyNews.
По словам президента, вступление Украины в НАТО положит конец «горячей фазе войны» и поможет впоследствии договориться о возвращении пока оккупированных территорий «дипломатическим путем».
Зеленский также сказал, что прекращение огня нужно, чтобы «гарантировать, что Путин не вернется, чтобы захватить больше территории Украины».
#UkraineWar#новости#ştiri
🤩Подпишись на 112.md
🤩Новости Молдовы и мира 24/7
🇺🇦"На Западе говорят о необходимости снизить призывной возраст. Вы хотите, чтобы я призывал молодых людей и они умирали без вашего оружия?"— заявил Владимир Зеленский.
По словам президента, основная проблема заключается не в возрасте призывников, а в нехватке вооружения.
Он также отметил, что Украина обращалась к Западу с просьбой оснастить 10 бригад ВСУ, но в результате США и ЕС обеспечили вооружением лишь 2,5 бригады.
#UkraineWar#новости#ştiri
🤩Подпишись на 112.md
🤩Новости Молдовы и мира 24/7
🇺🇦Нас выдавят из Курска, но до того времени мы потеряем еще больше территорий, — полковник СБУ в отставке Олег Стариков.
«Политики думают, что когда все закончится, начнутся переговоры — Россия уйдет… Россия уже не уйдет, это мы уже территорию потеряли. Чем дальше мы тянем время — тем больше мы теряем территорий», — считает Стариков.
Он также отметил, что для удержания Курска Украине нужно отправить туда всю армию.
#UkraineWar#новости#ştiri
🤩Подпишись на 112.md
🤩Новости Молдовы и мира 24/7
🇺🇸Сенатор республиканец Линдси Грэм обещает Украине "хорошее соглашение" в обмен на полезные ископаемые.
"Украина готова заключить соглашение с нами, не с Россией, поэтому это в наших интересах – обеспечить, чтобы Россия не устроилась там. Украина – это реально "житница" мира. 50% продовольствия в Африку поступает из Украины. Мы можем зарабатывать и иметь экономические отношения с Украиной, которые для нас будут очень полезные. Редкие полезные ископаемые. Хорошее соглашение для нас”, – сказал Грэм.
#UkraineWar#новости#ştiri
🤩Подпишись на 112.md
🤩Новости Молдовы и мира 24/7
Такер Карлсон - об ударах по территории России:
«Президент-хромая утка только что начал горячую войну с самой опасной страной в мире. Все мы очень близки к тому, чтобы быть убитыми. Несмотря на это, республиканский спикер палаты представителей умудрился ни разу не упомянуть об этом ни публично, ни на собраниях руководства. Что происходит?»
#UkraineWar#новости#ştiri
🤩Подпишись на 112.md
🤩Новости Молдовы и мира 24/7