Функция 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
🗣️: Привет, классный старший брат! 💐 (Держит розу) (Лежит на боку) (Моргает глазами) (Неожиданно падает с кровати) (Делает сальто на одной ноге) (Лежит на боку на полу) (Продолжает моргать глазами)
— я влюбился
🗣️: Я долго думал, что сказать, и, поскольку Чон Хэмин уходит, решил просто зарегистрироваться... 🐋
— Лучше действовать, чем раздумывать!!!
🗣️: ㅃㅇ Готовимся к учебе 👋
— Удачи в учебе!!!! 🍀
🗣️: Хэмин, я здесь.
— Вот здесь и здесь!!! ㅔ
🗣️: Хэмин, я снял это во время фан концерта, и мне оно так понравилось, что я хочу поделиться им с вами, ха-ха. Я так скучаю по моему мистеру Хэму!! (17)
— Я просто хочу вернуться назад.
— 190000
📢@Turn8Entertaiment
For-8Turn
#TurnNews
#News
Перевод
Хён, уже прошло 3 года.
Всегда спасибо тебе! Благодаря тебе я набираюсь сил.
Даже когда у меня нет энергии, ты поддерживаешь меня.
Ты как настоящий ENFP — всегда яркий и тёплый.
Давай и дальше идти вместе и создавать много
ценных воспоминаний.
С днём рождения!
Наш Хэм-за, с днём рождения!! ♡
Я тебя поздравляю уже четвёртый год.
За эти четыре года многое изменилось,
но мои чувства не изменились.
Я всегда буду на твоей стороне!
Спасибо тебе, Хэмин ♡
Хэм-за, поздравляю с днём рождения! ♡
Уже четвёртый раз поздравляю тебя.
Всегда заботься о себе,
ешь вкусную еду и будь счастлив.
Иногда бывает тяжело,
но давай и дальше идти вместе.
С днём рождения!
Хэмин, ты для меня человек,
который даёт много сил.
Каждый раз, когда мне тяжело,
я думаю о тебе и снова поднимаюсь.
Твоя искренность и старание
всегда вдохновляют.
Я хочу и дальше поддерживать тебя
и идти рядом.
Спасибо тебе за всё.
Всегда будь здоров и счастлив!
Привет, Хэмин! С днём рождения.
Ты очень тёплый и добрый человек.
Хотя ты иногда говоришь, что не уверен в себе,
для многих людей ты уже огромная поддержка.
Надеюсь, ты будешь получать
такую же любовь, какую даришь другим.
Береги себя. Я всегда болею за тебя.
Хэм-за! С днём рождения~~~
В этом году тоже улыбайся больше
и будь счастлив.
Я всегда буду рядом и поддерживать тебя
Хэм-за, с днём рождения.
Будь здоров и счастлив.
Надеюсь, ты знаешь,
как сильно мы тебя любим.
И дальше дари нам свою улыбку.
📢@Turn8Entertaiment
For-8Turn
#TurnNews
#News
#Twitter
📍 Обновление твиттера 8TURN_official
— KCON в Японии был просто потрясающим 💕 Увидимся в следующий раз ❤️
— It was so much fun at KCON JAPAN 💕 See you again next time ❤️
📢@Turn8Entertaiment
For-8Turn
#TurnNews
#News