Функция 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
Цены на российские сырьевые товары: насколько доступны котировки?
2022 год кардинально изменил торговые потоки, но мы уже в 2025 году: и участники рынка, и ценовые агентства уже адаптировались к новым условиям и запустили котировки. Экспортерам иногда «не хватает» котировки на конкретном базисе, но, по крайней мере, одна котировка для товара российского происхождения обычно доступна, что позволяет оценивать актуальные дисконты/премии к мировым ценам и анализировать текущую рыночную ситуацию.
Мы попробовали сделать свод по доступным ценовым котировкам для российских экспортных товаров. Почти наверняка это неполный список, а иногда данные могут отсутствовать для конкретного товара. Например, могут быть доступны данные по многим видам нефтепродуктов, но не по российскому битуму. Вероятна, и обратная ситуация – для продуктов, по которым мы поставили «-», на самом деле, есть ценовые котировки. На наш взгляд, в наименьшей степени сейчас покрываются рынки СПГ, цветных металлов, стальной продукции.
* зеленым отмечены позиции, по которым доступны полноценные котировки, желтым – в случае, если ценовые котировки доступны для нерелевантных рынков (например, для внутреннего рынка), но эти цены также используются экспортерами/импортерами из третьих стран, розовым – если доступны лишь данные по отдельным сделкам.
#ЦеныНаСырье#PRA
Цены на сырьевые товары: что нужно делать по мнению Владислава Мищенко
Дмитрий Гусев обращает внимание на интервью Владислава Мищенко в "Российской газете". Владислав Мищенко, экс-глава московского офиса Argus Media, является, вероятно, одним из самых титулованных независимых экспертов в области ценообразования на сырьевых рынках. Интервью, данное в правительственной газете, можно рассматривать как программное, и, действительно, богато на идеи.
Но позволим себе и немного поспорить с господином Мищенко:
- "у стран Ближнего Востока... есть своя биржа..., у США и стран Северной Америки - свои площадки.... У России,... таковой площадки нет."
Мы привыкли к тому, что рынок - сложнее. Например, бенчмарк при определении официальной цены на нефть, поставляемую Saudi Aramco (Official Selling Price, OSP), определяется местом поставки: для стран ЕС цены привязаны к ICE Brent, при поставках в Азию - к Platts Dubai, а в США (редкое сейчас направление) - к ASCI. Другие поставщики тоже чаще выбирают данные Platts и Argus, а не биржевые котировки, ведь биржи пришли на этот рынок (в его современном изводе) не так уж и давно.
А ценовых агентств, работающих на российском рынке, и сейчас не так уж и мало - от международных Platts и Argus, до российского НААНС-Медиа.
- "из-за действия санкций стоимость нашей нефти, оказывается заниженной через систему плавающих дифференциалов..., зачастую под влиянием исключительно конъюнктурных факторов".
Это объективная ситуация, ведь на рынке помимо продавцов есть и покупатели и цена образуется там, где предложение встречается со спросом. Вероятно, можно придумать наш, российский механизм для снижения дисконтов, но не окажемся ли мы в ситуации, описанной когда-то давно Фазилем Искандером в "Сандро из Чегема": чегемцы, торговавшие на городском рынке продуктами, иногда заламывали неимоверные цены и, не найдя покупателей, увозили все назад, в горы, говоря: "ничего, сами съедим"?
- "Нам нужен свой нефтяной эталон. Например... ВСТО".
Мы привыкли, что есть простая технология - нужно создать ценовое агентство для оценки стоимости физических партий, запустить фьючерс на бирже и - бенчмарк готов. Почему же до этого несколько попыток создать бенчмарк на основе Urals не увенчались успехом? Возможно, потому что производство бенчмарков отчасти искусство, а не механическая процедура?
- "Эту же практику можно применить... и для других товарно-сырьевых групп - зерно, минеральные удобрения, металлы, химия, газ"
Горячо поддерживаем. Если на рынке нефти и нефтепродуктов работает достаточно много ценовых агентств и СПбМТСБ, то вот освещение других рынков должно быть ярче.
Каким, например, котировкам российского зерна сейчас можно доверять?
#PRA#ESPO#Platts
#Elezioni#Romania#Presidenziali
Risultati definitivi:
Affluenza: 64,72% (+9,86 rispetto al 2019)
Nicușor #Dan (supp. #USR-#DREPT-#PMP-#FD-#REPER-#PRA-#Verzii|EPP|RE|G/EFA): 53,6%
George #Simion (#AUR|ECR): 46,4%
Nicușor Dan eletto nuovo Presidente della Romania.
In foto, la mappa del voto.
@OsservatorioEsteri
#Elezioni#Romania#Presidenziali
Risultati definitivi:
Affluenza: 53,21% (+0,65 rispetto al 2024)
George #Simion (#AUR|ECR): 40,96%
Nicușor #Dan (supp. #USR-#DREPT-#PMP-#FD-#REPER-#PRA-#Verzii|EPP|RE|G/EFA): 20,99%
Crin #Antonescu (supp. #ARo|S&D|EPP): 20,07%
Victor #Ponta: 13,04%
Elena #Lasconi (#USR|RE): 2,68%
Lavinia #Șandru (#PUSL|Centro umanista populista): 0,64%
Daniel #Funeriu: 0,43%
Cristian #Terheș (#PNCR|ECR): 0,39%
Sebastian #Popescu (#PNR|Populisti): 0,28%
John Ion #Banu: 0,23%
Silviu #Predoiu (#PLAN|Centro): 0,18%
Necessario un secondo turno tra Simion e Dan.
In foto, la mappa del voto.
@OsservatorioEsteri