Функция 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
Valentine's Day Messages:
.1All I wanted was someone to care for me,
All I wanted was someone who'd b there for me,
All I ever wanted was someone who'd b true,
All I ever wanted was someone like You!
Happy Valentine's Day!
2.A day filled with kisses, a week filled with romance, a month filled with love, a year filled with bliss and a lifetime filled with happy memories. I want to spend the rest of my life with you.
Happy Valentine’s Day!
3.Darling, my love for you is as deep as the sea and as high as the sky. Happy Valentine’s Day!
When I look at you, I’m amazed by your beauty, both on the outside and the inside. Happy Valentine’s Day!
4.I still remember the moment when our eyes met for the first time. I felt butterflies in my stomach and since then my heart longs to be with you always. Be mine forever!
5.A day without you is a day without a sun, a night without a moon; a life without meaning.
6.Happy Valentine’s Day to the most special person in my life. You are my love, my heart and my joy.
#Messages
#Teamjimmy
#sirjimmy
@translobot
Qué puede hacer este bot?
Este es un bot traductor
Translo le permite traducir mensajes a más de 90 idiomas.
Idioma: Múltiple
(visto en @BotsGram_cu)
#translate, #suggest, #translation, #messages, #command, #english
@GitHubBot
Qué puede hacer este bot?
Este es un bot de GitHub. Puede notificarle sobre eventos en sus repositorios públicos de GitHub. También puede responder a tus mensajes para publicar comentarios en GitHub directamente desde Telegram.
Idioma: Inglés
(visto en @BotsGram_cu)
#telegram, #notify, #events, #github, #delete, #public, #command, #messages, #repository
@YTranslateBot
Qué puede hacer este bot?
Este bot traduce desde cualquier idioma a tu lenguaje nativo en el chat
(visto en @BotsGram_cu)
#translate, #yandex, #free, #suggest, #translation, #messages, #command, #remember, #english
@junction_bot
Qué puede hacer este bot?
Este bot puede recopilar publicaciones de tus canales favoritos de Telegram, para que puedas leerlas como un servicio de noticias.
¡También puede copiar mensajes entre canales y bots, filtrar anuncios, modificar mensajes y mucho más!
Idioma: Inglés, Ruso, Turco
(visto en @BotsGram_cu)
#link, #word, #project, #feed, #messages, #group, #subscription, #telegram, #share, #channel, #questions, #command, #inline, #join, #twitter, #favorite, #collect, #news, #enter, #place, #free, #message, #welcome