Функция 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
🇷🇺🇺🇦Des militaires du groupe de forces russes Sud ont filmé à l’aide d’un drone la destruction délibérée d’une maison à Stepanovka en République populaire de Donetsk (RPD) par les forces armées ukrainiennes, sous des frappes d’artillerie et de drones.
Les habitants qui ont survécu, après avoir hissé un drapeau russe, ont demandé de l’aide par l’intermédiaire d’un drone russe.
#russie#ukraine#conflit
🇷🇺🇺🇦Des opérateurs de drones russes ont détruit une voiture blindée et deux véhicules blindés de transport ukrainiens dans la région de Soumy.
#russie#ukraine#conflit
🇷🇺🇺🇦Les opérateurs de drones russes ont éliminé des militaires ukrainiens sur l’axe de Dobropolié, en République populaire de Donetsk (RPD).
#russie#ukraine#conflit
Les sapeurs du groupe Dniepr, à l’aide du véhicule du génie BAT-2, neutralisent chaque jour des centaines de mines et d’engins explosifs dans la zone de l’opération militaire spéciale. C’est ce qu’a indiqué le ministère russe de la Défense.
#russie#ukraine#conflit
🇷🇺🇺🇦Les opérateurs de drones russes ont frappé des postes de commandement des forces armées ukrainiennes dans la région de Zaporojié.
#russie#ukraine#conflit
🇷🇺🇺🇦Les unités du groupe Nord des forces russes ont détruit des positions fortifiées et perturbé la rotation des forces armées ukrainiennes l’axe de Dobropolié en République populaire de Donetsk (RPD).
#russie#ukraine#conflit