Функция 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
#CHESS/USDT analysis :
#CHESS is currently in an uptrend, consistently making higher highs (HHs) and higher lows (HLs), while finding support along the trendline. A breakout above the counter-trendline is anticipated, which will lead to a test of previous highs.
TF : 1D
Entry : $0.1945
Target : $0.2730
SL : $0.1586
#CHESS/USDT analysis :
#CHESS is currently going through a correction phase and retracing back to the 200 EMA before continuing its bearish move. The price is bouncing back from the support line and is expected to test the 200 EMA.
TF : 1h
Entry : $0.1358
Target : $0.1419
SL : $0.1315
#CHESS (Binance Futures and Spot)
✅Sub $10 million market cap coin
✅Fully bottomed
✅Loking exactly like MYX at $1, before making a 1800% move to $18
CHESS is an easy 10x move, grabbing a big bag here below $0.05
#CHESS (Binance Futures and Spot)
✅Sub $10 million market cap coin
✅Fully bottomed
✅Loking exactly like MYX at $1, before making a 1800% move to $18
CHESS is an easy 10x move, grabbing a big bag here below $0.05
LONGING $CHESS HERE
Exchanges: Binance (Spot and Futures)
#CHESS is not only a gem, it’s what we call a once in a lifetime trade. Fully bottomed, momentum stronger than anything we’ve seen, and an easy short term target at $0.25 - $0.5. Buy it below $0.045 while you can
Entry: Below 0.045
Targets: 0.047 - 0.049 - 0.052 - 0.059 - 0.072 - 0.095 - 0.120 - 0.142 - 0.231 - OPEN
SL: Below 0.034