Функция 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
[BPLRT] UPDATE: Free regular bus services between #ChoaChuKang and #Bukit Panjang are available. If your journey has been affected, you may download an e-Travel Chit as proof of your travel at https://bit.ly/39HsrAl.
- SMRT
🎸Singer and surfer Jack Johnson to give a concert in Bali
📆 Jack Johnson will be coming to Bali in 2025 for a chamber event to be held at Uluwatu Surf Villas on Bukit Peninsula on June 18, 2025 and it will be one performance only.
🎫 Less than 1,000 tickets are expected to go on sale. It costs Rp 2,205,000 for adults and Rp 815,000 for children 5-12 years old. Food and drinks will be available all evening and the event will be completely outdoors. It will be held in all weather conditions.
ℹ️ The singer has become known for his soft acoustic music that has become a symbol of the surf culture of the 2000s (many have heard one of his most famous tracks Better Together. Jack Johnson rose to fame after the release of surf movie The September Sessions, where he performed his first songs.
@BaliNews
#events#concerts#Bukit
🍊Mandarin Oriental to open new hotel in Bali
🏨 Famous Mandarin Oriental plans to open a luxury resort on the Bukit Peninsula in 2027. The new project will feature 110 rooms, suites and villas, all of which will blend in with the natural surroundings.
🕺 Renowned interior designer Jeffrey Wilkes is involved in the project. He designs luxury hotels and residences.
📍 The location of the resort will be 30 minutes from the international airport. Close to popular tourist areas such as Jimbaran, Uluwatu and Nusa Dua.
@BaliNews
#places#hotels#goodnews#Bukit
⛔The canyon to Tanah Barak Beach has been closed to private vehicles
📰 One of Bukit's most photogenic spots near the famous Pandawa Beach, Tanah Barak Canyon, is now off-limits to private vehicles. Tourists will have to walk or take a paid shuttle service.
🏝 Visitors will now be able to enjoy the beauty and tranquillity of Tanah Barak without the passing motorbikes and autos.
@BaliNews
#trasport#roads#Bukit#beaches
🛣Details about the construction of a district road in Bukit
District authorities are set to solve the road issue in Uluwatu by laying a new district road.
Construction of the first section from Siligita village to Sawangan in Nusa Dua district has already started.
The original idea was to extend the toll road, which now runs from the airport to Nusa Dua, all the way to Uluwatu.
Right now, traffic on the main road jl. Uluwatu is difficult because it is both a hub of commerce and the main thoroughfare of the area, used by everyone from locals to construction vehicles and tour buses.
The land acquisition budget for 2024 will be $16 million, with the next one already promised to increase to $19 million.
According to an insider in Bali's land office, all consideration of new housing development in the green zone on Bukit is now halted just in time for the land acquisition for the new roads.
@BaliNews
#roads#roads#authorities#Bukit#Uluwatu#NusaDua