Функция 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
Наконец-то смог поиграть в новый Аркнайтс.
Прошёл первые главы и покрутил гачу. За вход в игру дали Арделию, а в стандартном баннере выпала её копия, а также Лифэн. Пограничник выпал в баннере новичка. Бесплатного легендарного персонажа ещё не выбирал, но в ящике с оружием взял меч для Пограничника.
Впечатления примерно как на бета-тесте, начало игры просто освежило память. Очень хотелось депнуть на Лэватейн, но я сдержался и решил вообще не донатить в игру в первом патче.
Добавляйтесь в друзья: 6327281061
#endfield@ostalf_lab
Мне попался смешной ролик с озвучкой сюжета ХСР через нейросеть. Там иронично озвучивались происходящие события... и у меня появилась глупая идея: записать стартовый геймплей Эндфилда, написать текст, озвучить его и смонтировать всё в ролик.
Почему-то вся эта история хорошо лайкается и воспринимается как ирония, поэтому я по приколу залил видео в ТикТок.
Бездарная трата времени.
#endfield@ostalf_lab
Оказывается Т2x2 нашёл лайфхак по выпадению легендарок в Arknights: Endfield :D
Я обычно не смотрю стримеров, но мне стало интересно как он будет обозревать игру на проплаченном стриме.
Итог: такая себе реклама.
#endfield@ostalf_lab
В следующем месяце стартует бета-тестирование Arknights: Endfield.
Это интересный проект, за которым я слежу с первого бета-теста. Зарезервировал URL, но планировал запустить канал ближе к релизу или после подтверждения русской локализации. Птичка нашептала, что русский перевод всё таки будет, так что канал запустил сегодня. Уже появились первые официальные русскоязычные ресурсы, а 31 октября пройдёт специальная трансляция. Запись трансляции будет доступна с русскими субтитрами.
Постараюсь получить доступ к бета-тестированию или поработать с другим тестером.
Слышали об этой игре?
#endfield@ostalf_lab
Продуктивно провёл первую половину стрима — работал на заводе строил своё производство.
Сегодня умудрился выбить созвездие Эмбер и легендарный меч, а также получил сигнатурное оружие Эмбер за закрытие баннера новичка.
#стрим@ostalf_lab / #endfield@ostalf_lab
🥳Канал по новому Аркнайтсу достиг отметки в десять тысяч подписчиков.
Принял участие в веб-ивенте, но доступ получить не смог. Кто-нибудь из вас стал счастливчиком?
#проекты / #endfield