Функция 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
🌎 The mysterious "terror bird" Titanis walleri once roamed North America about 2 million years ago. Standing nearly 2.5 meters tall, it was a flightless predator with a massive hooked beak. Fossils show it preyed on small mammals, and its closest living relatives are modern seriemas of South America. ✨
#paleontology⚡#fossils⚡#birds
👉subscribe Interesting Planet
👉more Channels
🌎 Ice Age cave lions once roamed across Europe and Asia, hunting mammoths and bison in frigid steppe. Larger than today’s lions, these extinct predators are known from beautifully preserved cave paintings and even mummified cubs found in Siberian permafrost. ✨
#paleontology⚡#megafauna⚡#prehistory
👉subscribe Interesting Planet
🌎 The chambered nautilus, often called a “living fossil,” has survived nearly unchanged for over 500 million years. Its spiral shell and tentacled, squid-like body resemble fossils from the early Paleozoic era. Living nautiluses inhabit deep reefs in the Indo-Pacific and can have over 90 tentacles. ✨
#nautilus⚡#paleontology⚡#evolution
👉subscribe Interesting Planet
👉more Channels
🌎 The Gomphothere, an ancient cousin of elephants, once roamed the Americas with shovel-shaped lower jaws. These extinct giants sported four tusks instead of two, thriving for millions of years before vanishing at the end of the last Ice Age. ✨
#paleontology⚡#megafauna⚡#extinction
👉subscribe Interesting Planet
🌎 Long before trees, Earth was covered in giant mushrooms called Prototaxites, some reaching up to 8 meters tall. These towering fungi dominated ancient landscapes 420 million years ago, before forests appeared. ✨
#paleontology⚡#fungi⚡#prehistory
👉subscribe Interesting Planet
🌎 The pikaia, a tiny worm-like creature from 500 million years ago, may be one of our earliest known ancestors. Its flexible, cord-like structure helped pave the way for the backbone found in all vertebrates today. ✨
#evolution⚡#paleontology⚡#ancestry
👉subscribe Interesting Planet
🌎 Australian megafauna like Diprotodon, the largest marsupial ever, disappeared about 46,000 years ago. These giant wombat relatives weighed up to 2,750 kilograms. The cause of their extinction is debated—some studies suggest climate shifts, while others blame human hunting. Diprotodon fossils have been found at over 100 sites across Australia. ✨
#extinctanimals⚡#megafauna⚡#paleontology
👉subscribe Interesting Planet
👉more Channels
🌎 The mysterious extinction of the “Siberian unicorn,” or Elasmotherium sibiricum, puzzles paleontologists. This massive Ice Age mammal, related to modern rhinos, had a large forehead horn and grazed Eurasian steppes. DNA studies show it survived until about 39,000 years ago—much later than once thought. ✨
#extinctanimals⚡#paleontology⚡#iceage
👉subscribe Interesting Planet
👉more Channels
🌎 The woolly rhinoceros, Coelodonta antiquitatis, roamed Ice Age Eurasia with a thick fur coat and massive horn. Fossils found in Siberian permafrost show it survived extreme cold; its extinction about 14,000 years ago is linked to climate warming and human hunting. ✨
#extinctanimals⚡#paleontology⚡#iceage
👉subscribe Interesting Planet
👉more Channels
🌎 The giant short-faced bear, Arctodus simus, roamed North America during the last Ice Age. Standing up to 1.5 meters at the shoulder, it was one of the largest terrestrial mammalian carnivores ever, yet paleontologists debate if it was mainly a predator or a scavenger. Fossils suggest it vanished around 11,000 years ago, along with much other megafauna. ✨
#extinctanimals⚡#paleontology⚡#iceage
👉subscribe Interesting Planet
👉more Channels
🌎 The Siberian unicorn, or Elasmotherium, was a massive prehistoric rhinoceros with a single huge horn on its forehead. Fossils show it roamed Eurasia until about 39,000 years ago, much later than once believed. ✨
#extinctanimals⚡#paleontology⚡#iceage
👉subscribe Interesting Planet