我正在嘗試在 Snowflake 的視圖中創建一列,以替換我不關心的字串之間的任何字串。
這主要是為了從文本中去除 html 格式。舉個例子:
<ul>
<li>Text I care about 1
<li>Text I care about 2</li>
<li>Text I care about 3</li>
</ul>
最終應該是這樣的:
Text I care about 1
Text I care about 2
Text I care about 3
根據我看到的模式,我認為如果我可以消除任何以 < 開頭并以 > 結尾的字串,我應該能夠實作我正在尋找的結果。
在不同站點上進行測驗時,似乎運算式
REGEXP_REPLACE(originaltext, '<. ?>','')應該起作用,但是在 Snowflake 中嘗試時,它似乎在某些情況下切斷了最后一個“我關心的文本”,而在其他情況下根本沒有顯示任何結果。我不確定正在使用的正則運算式雪花版本中是否存在語法差異或其他內容,但任何建議將不勝感激。
uj5u.com熱心網友回復:
您的正則運算式有效,但需要環顧四周。
set sample1 = '<ul>';
set sample2 = '<li>Text I care about 1';
set sample3 = '<li>Text I care about 2</li>';
set sample4 = '<li>Text I care about 3</li>';
set sample5 = '</ul>';
select regexp_replace2($SAMPLE1,'<. ?>','');
select regexp_replace2($SAMPLE2,'<. ?>','');
select regexp_replace2($SAMPLE3,'<. ?>','');
select regexp_replace2($SAMPLE4,'<. ?>','');
select regexp_replace2($SAMPLE5,'<. ?>','');
我撰寫了一個支持正則運算式環視的 UDF 庫。它嘗試近似內置的 Snowflake 正則運算式函式,同時支持環視。UDF 的名稱與 SQL 示例中顯示的帶有后綴“2”的內置正則運算式函式相同。
https://github.com/GregPavlik/SnowflakeUDFs/tree/main/RegularExpressions
uj5u.com熱心網友回復:
不優雅,但是如果您知道要洗掉的所有特殊編碼,也許您可??以像這樣列出它們?
select REGEXP_REPLACE('<li>Text I care about 3</li>', '(<)|(li>)|(/li>)','')
uj5u.com熱心網友回復:
您面臨的挑戰是您使用的是 LAZY 量詞(. ?),而根據我們的檔案,Snowflake 不支持它:
Patterns support the full POSIX ERE (Extended Regular Expression) syntax. For details, see the POSIX basic and extendedsection (in Wikipedia).
維基百科的鏈接顯示,懶惰是不是由ERE標準所涵蓋,但它是一個擴展。
在您的情況下,您可以使用REGEXP_SUBSTR,如下所示:
SELECT REGEXP_SUBSTR('<li>Text I care about 1</li>', '(\\w \\s) \\d');
輸出如下:
Text I care about 1
但這需要您資料的特定模式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/346154.html
