Функция 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
Первый случай за всё существование канала — рубрика «Дуга ебейшая» в… хоккее? 🏒
Что это было?! Это Уайтт Джонстон из «Даллас Старз» ставит точку в матче с «Миннесотой», отправляя шайбу в пустые. Но посмотрите на траекторию…
Шайба уже уходила мимо и защитник «Уайлд» Куинн Хьюз даже перестал бежать и решил, что будет проброс — но… шайба взяла и завернула в створ по идеальной дуге.
Магнит? Магия? Чистая физика!
😎Ozzy в MAX | #Хоккей#NHL
«Нашёл щёлочку» — снайперский выстрел Капризова в самую девять 🎯
Кирилл Зэ Трилл набрал 1+2 с победным голом в первом матче серии с «Далласом» и был признан второй звездой матча — теперь на счету 28-летнего россиянина стало 24 (16+8) очка в 26 играх в плей-офф НХЛ за карьеру и это повторение рекорда «Миннесоты».
😎Ozzy в MAX | #Хоккей#NHL
Давно не было этого парня в ленте 🛩
Матвей Мичков набрал 1+2 с победным голом в матче против «Монреаля» и был признан первой звездой матча и второй звездой дня в НХЛ — теперь на его счету 20+31 в 81 игре сезона.
Подведём итоги сезона для 21-летнего русского из «Филадельфии» — второй сезон подряд подряд 20+ голов и 50+ очков, он четвертый снайпер и четвертый же бомбардир клуба.
👏 — красавчик
🤓 — я ожидал большего
😎Ozzy в MAX | #Хоккей#NHL
Красота дня в НХЛ — Джек Айкел и его глаза на затылке 👀
Это парни из «Вегас Голден Найтс» разыграли идеальную комбинацию — Джек Айкел, проезжая за воротами, отдал роскошный ноулук-ассист на Барбашева.
Ивану оставалось просто не промахнуться в пустой угол — у него 1+1 в матче и 23+38 в 81 игре в сезоне при полезности «+20». Достойно!
PS. С вратарём «Виннипега» после гола случился эталонный мем «АЧО ВСМЫСЛЕ?» — кажется, он так и не понял, что с ним произошло 😁
😎Ozzy в MAX | #Хоккей#NHL
Русская красота дня в НХЛ — шедевр от Биг Вэла 🧨
Это Валерий Ничушкин из «Колорадо Эвеланш» сделал дубль с «Сент-Луисом» и был признан первой звездой матча — теперь на его счету 17+30 очков в 67 играх в сезоне при полезности «+8».
Второй гол получился особенно кайфовым — Вэл забил в меньшинстве броском из-под ноги.
😎Ozzy в MAX | #Хоккей#NHL
Роскошная комбинация «Тампы» и гол номер 400 от Никиты Кучерова 😍
Куч забил «Баффало» свой 400-й гол в регулярных чемпионатах НХЛ — всего на его счету 1120 (400+720) очков в 874 матчах за карьеру.
Что же касается текущего сезона, то теперь у русского могучего форварда 126 (43+83) очков в текущем сезоне в 71 игре и он догнал Коннора Макдэвида в гонке бомбардиров — у того те же (43+83), но в 77 матчах сезона.
А ещё:
⏺Кучеров — второй игрок с 400+ голами за «Тампу» в НХЛ. У Стэмкоса — 555.
⏺Кучеров — восьмой россиянин в истории НХЛ с 400+ шайбами в регулярках, а среди начавших карьеру в XXI веке — четвертый. Ранее такое достижение покорилось — Овечкину (928 голов в 1569 играх), Малкину (532 в 1267), Федорову (483 в 1248), Могильному (473 в 990), Ковальчуку (443 в 926), Буре (437 в 702) и Ковалеву (430 в 1316).
😎Ozzy в MAX | #Хоккей#NHL
«Kid Line» «Детское звено Шаркс» решает 🦈
Это тройка «Сан-Хосе» Селебрини — Смит — Чернышов организовала победный гол в ворота «Коламбуса» — суммарный возраст этого звена всего 60 лет (19+21+20).
Игорь Чернышов оформил первый дубль в НХЛ — у 20-летнего русского форварда «Сан-Хосе» 5+9 в 19 играх в сезоне.
«Акулёнок ту-ру-ру-ру»
😎Ozzy в MAX | #Хоккей#NHL
🦅
1️⃣
1️⃣
1️⃣ Великий внезапно пульнул в «Юту» хет-триком
3 — гола в матче
34 — хет-триков в лиге в рамках регулярок и это четвертое место в истории НХЛ по этому показателю
29+27 — 56 очков в 73 матчах чемпионата
926 — голов в карьере в регулярках
1003 — гола в карьере с учетом плей-офф
9 — матчей осталось сыграть в чемпионате
13 — до Гретцки
😎Ozzy в MAX | #Хоккей#NHL
Немного хоккейного волшебства вам в утреннюю ленту — что-то на Дацюкском 🪄
Это Артемий Панарин из «ЭлЭй Кингз» в серии буллитов исполнил что-то ультрастильное — вначале Хлебушек обманными движениями уложил вратаря соперника на живот как пингвина, а потом запустил ему за шиворот парашютик в стиле Павла Дацюка.
😎Ozzy в MAX | #Хоккей#NHL