Функция 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
#trending: Teenager who has autism waits an hour at Jurong East MRT Station with no train service, mum goes to his aid
"The problem was that he didn’t know what his next step should be. At the same time, he may have been hoping that the train would arrive later." Ms Lydiawati Ismail said of her son who has autism.
🚇https://tdy.sg/3NajJLe
@todayonlinesg
#trending: Father-daughter dance at competition goes viral, viewers say it made them cry or think of their own dads
They won a “special mention” medal and they were also the oldest and youngest participants in the open category, Mr Jay Sng said.
🤸♂️🧑🧒https://tdy.sg/3XkEgla
@todayonlinesg
#trending: S'pore woman's biggest culture shock living in Sweden? Many couples skip marriage even after kids
Ms Wynnette Yip said that she has been in a relationship with her Swedish partner for eight years and often faces questions from friends and family in Singapore on whether her other half was ever going to propose to her or was simply "wasting (her) time".
🇸🇪https://tdy.sg/3ZpFcHx
@todayonlinesg
#trending: 'Full-on racial harmony' — video of Chinese S'porean youths loving Tamil movie goes viral
Many netizens found it refreshing and heartwarming to see Chinese youths so thoroughly enjoying a film of a different language and culture, with users calling their reactions "cute" and "awesome".
🎬https://tdy.sg/3AQNKwP
@todayonlinesg
#trending: 'Completely drained' — British expat's tale of long hours in China's tech sector goes viral
Many social media users in China were amused to see a foreigner grappling with the demanding work culture in their country.
🇨🇳https://tdy.sg/4egs2Ry
@todayonlinesg
#trending: S'pore non-profit that staged TikTok video of man harassing woman sparks debate on when to step in to help others
TikTok users have lauded real-life passers-by who chose to intervene and help the woman, not realising that it was a staged incident. They said that it is important to look out for each other.
➡️https://tdy.sg/3Xcbx1X
@todayonlinesg
#trending: SIA flight attendant praised as 'angel' for helping passenger clean jeans using own stain remover pen
In a "friendly chat" with a cabin crew member she referred to as Aiden, Ms Paige Parker asked him "almost jokingly" if SIA had any stain removers, expecting the answer would be no.
✈️https://tdy.sg/3AxJC4T
@todayonlinesg
#trending: Is Amsterdam safer? S'porean woman's reasons for moving to the Netherlands spark debate online
Aside from her safety concerns, the weather was a major factor, as she found Singapore too hot and humid. "I can't be sweating perpetually," she wrote.
➡️https://tdy.sg/3Ti9EQf
@todayonlinesg
#trending: Japanese ramen shop ranks Singaporeans’ spice tolerance as ‘mid’; netizens agree
Out of 10 levels, Singapore and Malaysia are ranked in the middle while Indonesia is at the top with the highest spice tolerance.
➡️https://tdy.sg/4fNFrBQ
#trending: Influencer's praise of NDP crowd control leaves S'poreans grateful for reminder 'we are so blessed'
Ms Francesca Tanmizi, an Indonesian who lives in Singapore, told her 316,000 TikTok followers she was wowed by the efficiency of NDP crowd control, the speedy cleanup of rainwater and the friendliness of the personnel involved.
🇸🇬https://tdy.sg/3WByhIk
@todayonlinesg
#trending: New S'pore teen character in Marvel comic book sounds like burnt-out student, say netizens
A Redditor teased that the character's powers could be “the result of years of training by her kiasu Tiger mum under the Singapore academic system” rather than an actual superpower.
👩🎓https://tdy.sg/4dFadep
@todayonlinesg
#trending: Netizens praise Jetstar Asia's 20th anniversary song for celebrating uniquely Singaporean traits
One viewer wrote: "Please consider (Mr Van Der Ven) for NDP theme song. He writes his own music and can supply 20 different types of aunties."
➡️https://tdy.sg/3WqSn85