尝试使用Snowflake的REGEX_SUBSTR()函数提取文本。我有一个使用CASEWHEN来处理不同场景的工作解决方案,但如果存在的话,我希望有一个更干净的解决方案
以下是三种可能的场景和我们想要提取的文本:
- https://someDomain.com/constant-string/EXTRACT
- https://someDomain.com/constant-string/EXTRACT/someOtherText
- https://someDomain.com/constant-string/EXTRACT/someOtherText/someOtherText/…/someOtherText
在这三种情况下,域可以改变,反斜杠的数量可以改变,但常量字符串将始终相同,我总是想提取紧跟在常量字符串之后的文本,直到下一个反斜杠,或者在没有其他反斜杠的情况下,直到最后。问题是,由于反斜杠的数量可以改变,并且URL并不总是以反斜杠结尾,因此我不得不使用三个不同的REGEX_SUBSTR()函数来实现这一点-这很好,但是要寻找一个单行的REGEX_SUBSTR()解决方案,
以下是我目前的解决方案:
WHEN CONTAINS(REGEXP_SUBSTR(url, '(constant-string/)(.*?)(/)', 1, 1, 'e', 2), '/') THEN REGEXP_SUBSTR(url, '(constant-string/)(.*)(/.*?)/', 1, 1, 'e', 2)
WHEN REGEXP_SUBSTR(url, '(constant-string/)(.*?)(/)', 1, 1, 'e', 2) IS NOT NULL THEN REGEXP_SUBSTR(url, '(constant-string/)(.*?)(/)', 1, 1, 'e', 2)
WHEN REGEXP_SUBSTR(url, '(constant-string/)(.*?)(/)', 1, 1, 'e', 2) IS NULL THEN REGEXP_SUBSTR(url, '(constant-string/)(.*)(/|$)', 1, 1, 'e', 2)
ELSE 'None of These'
1条答案
按热度按时间xqkwcwgp1#
1.将斜杠上的URL拆分为数组
1.在数组中找到常量字符串
1.获取数组中的下一个值
| ARY|指数|提取物|
| --|--|--|
| [“https:“,"",”someDomain.com“,“constant-string”,“EXTRACT”,“somewhere Text”]| 3 |提取物|