@marselabdullin

Как получить строку из файла пропуская определенные слова регулярным выражением?

Есть текстовый файл, из него нужно получить строку - первое вхождение содержащее DmpKey, от которого берется hashdiff(в данном случае DateStock_DmpKey пометил в тексте файла)
SELECT 
	ds.DateStock_DmpKey,
	ds.Location_DmpKey,
	ds.Item_DmpKey,
	ds.Date_DmpKey,
	ds.LoadDTM,
	ds.RecSrc,
	ds.SnapshotDT
FROM (
	SELECT
		HASH('DateStock*' || ds.Location_BizKey || '*' || ds.Item_BizKey || '*' || ds.Date_DmpKey) AS DateStock_DmpKey(это он) ,
		HASH(ds.Location_BizKey) AS Location_DmpKey,
		HASH(ds.Item_BizKey) AS Item_DmpKey,
		ds.Date_DmpKey,
		'{{ macros.datetime.now() }}' AS LoadDTM,
		'naCitilink*Irk' AS RecSrc,
		'{{ ds }}' AS SnapshotDT
	FROM (
		SELECT 
			'Location*naCitilink*Irk*' ||  CAST(stg."Location Code" AS varchar(40))  AS Location_BizKey,
			'Item*naCitilink*' || CAST(stg."Item no_" AS varchar(100))                AS Item_BizKey,
			to_char(DateP, 'YYYYMMDD')::int                                           AS Date_DmpKey
		FROM Stage.STG_Ctl_IRK_Date_Stock stg
		WHERE 
			-- catchup_snapshotdt_start
			stg.SnapshotDT = '{{ ds }}'
			-- catchup_snapshotdt_end
		LIMIT 1 OVER (PARTITION BY stg.DateP, stg."Location Code", stg."Item no_" ORDER BY stg.LoadDTM DESC)
	) AS ds
) AS ds

LEFT JOIN RawVault.RV_Lnk_DateStock tgt
	ON tgt.DateStock_DmpKey = ds.DateStock_DmpKey
	AND tgt.RecSrc = ds.RecSrc
	
WHERE tgt.DateStock_DmpKey IS NULL;


Такое регулярное выражение работает - (?<=HASH\(.*\)\s+AS\s+).+_DmpKey, но здесь выходит ошибка
look-behind requires fixed-width pattern
надо избавиться от неопределенного количества символов в выражении с ?<=
  • Вопрос задан
  • 70 просмотров
Решения вопроса 1
@dodo512
import re

text = "HASH('DateStock*' || ds.Location_BizKey || '*' || ds.Item_BizKey || '*' || ds.Date_DmpKey) AS DateStock_DmpKey(это он) "

m = re.search('HASH\(.*\)\s+AS\s+(\w+_DmpKey)', text)

print(m.group(1))
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@marselabdullin Автор вопроса
dodo512, это выражение берет всю строку в переменной text, а мне нужно только DateStock_DmpKey, то есть опираться на hash(...) as при поиске и при этом не брать его в итоговый результат(для этого есть параметр ?<=, но в него нельзя передать неограниченное количество символов)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы