Функция 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
#1940е
В 1940-м году люди были простые и развлечения у них были непритязательные. Вот например, Nimatron - вероятно первая видеоигра. И одновременно устройство для игры. Громадину показали на Всемирной выставке в Нью-йорке, где она пользовалась успехом, но вот массового производства не началось, а сам аппарат потом разобрали и выкинули.
Собственно Nimatron представлял из себя четыре столбца по семь ламп. Игрок в свой ход мог погасить одну или больше ламп в одном из рядов. Потом так же поступает компьютер. Выигрывает тот, что выключает последнюю лампу. Вот это азарт!
В общем-то проблема была в том, что Nimatron были лишь чисто развлекательным устройством и не более. Если бы его автор, Эдвард Кондон, понял, что потенциал-то гораздо больше, благодаря созданным им принципам программирования, то возможно у аппарата была бы более счастливая судьба.
#1940е#1960е
В Золотой и Серебряный век комиксов было немало дурацких персонажей, над историей происхождения которых авторы не особо заморачивались. Многих таких первых супергероев уже забыли, а другим после меняли легенду и адаптировали под новых "носителей" с более адекватной предысторией. Так, у знаменитого Зелёного Фонаря Алана Скотта было забавное начало. Его спасает от рушащегося моста живое пламя из космоса, которое находится в фонаре, созданном бывшим пациентом психушки. Прекрасно же, но сейчас эту историю, кажется, предпочитают не вспоминать. Вот ещё 3 чудных происхождения супергероев.
Крипер (Showcase#73, 1967) - Репортер Джек Райдер надевает яркий костюм, чтобы пробраться на вечеринку, но, когда получает ранение, сумасшедший ученый имплантирует Джеку под кожу устройство преобразования материи. Оно позволяет Джеку превращаться в дикого дальтоника-супергероя.
Метаморфо (The Brave and the Bold #57, 1965) - авантюрист Рекс Мейсон был нанят, чтобы найти Сферу Ра, но его вырубает парень, похожий на пещерного человека, подвергают воздействию облученного метеорита и превращают в монстра со способностью обращаться во все виды стихий — но не обратно в Рекса.
Уиззер (USA Comics #1, 1941) - Боб Фрэнк вместе с отцом сбегает в Африку от гангстеров и умирает там от лихорадки. Отец делает ему переливание крови мангуста, отчего Боб развивает суперскорость и решает бороться с бандитами.
#1930е#1940е#1950е
Пачка умопомрачительных и захъватывающих иллюстраций американского художника Фрэнка Тинсли. Он создавал для различных журналов образы технологического будущего, причёс чаще всего мыслил масштабно. Поезда в стеклянных трубах, ловец для космических ракет, лазерные пушки, подводные станции и прочее. Некоторые из его образов кажутся сейчас наивными фантазиями. Впрочем, другие уже реализованы, например, судно на воздушной подушке и пожарный вертолёт.