Функция 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
📩#AVAXUSDT 30m | Mid-Term
📉Long Entry Zone: 23.323-21.858
🎯 - Strategy Accuracy: 89.06%
Last 5 signals: 100.0%
Last 10 signals: 100.0%
Last 20 signals: 90.0%
⏳ - Signal details:
Target 1: 23.673
Target 2: 24.023
Target 3: 24.373
Target 4: 25.422
_____
🧲Trend-Line: 21.858
❌Stop-Loss: 21.531
💡After reaching the first target you can put the rest of the position to breakeven
📩#AVAXUSDT 30m | Mid-Term
📉Long Entry Zone: 25.868-24.942
🎯 - Strategy Accuracy: 88.69%
Last 5 signals: 100.0%
Last 10 signals: 100.0%
Last 20 signals: 90.0%
⏳ - Signal details:
Target 1: 26.256
Target 2: 26.644
Target 3: 27.032
Target 4: 28.196
_____
🧲Trend-Line: 24.942
❌Stop-Loss: 24.568
💡After reaching the first target you can put the rest of the position to breakeven
👆 Propheta living up to its name yet again 🔮
Reached 9th TP on our #AVAXUSDT trade! 🔥🔥🔥
🤑 All this profit could have been yours! 🔥ACCESS TO MANUAL TRADING for 70usdt/month
👉 We're sure that 99% of the signals channels simply cannot provide transparent performance reports like we do! Check it out - @propheta_reports
Register and get bonuses up to $6,000
Binance | OKX | ByBit👈🏻click!
#cryptobot#CryptoSignal#cryptonews
Oops, we did it again 🤣
#AVAXUSDT reached 9th TP!
Signal from our VIP CLUB channel!
Easy $450 with a 5% entry and a $1000 deposit!
ACCESS TO MANUAL TRADING for 70usdt/month
💪Rule the market with Propheta AI Signals: ultra-sharp alerts, full-on process automation, and a killer Cornix synergy — your fast track to max profits! GET THE ACCESS TO AI SIGNALS
Register and get bonuses up to $6,000
Binance | OKX | ByBit👈🏻click!
#tradingindicator#passiveincome#cryptochannel