本文介绍了雪花SQL正则表达式~提取多个VAL的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试使用雪花regexp_substr()标识嵌套在字符串中的值
我要访问的值在引号中:
...
Type:
a:
- !<string>
val: "A"
- !<string>
val: "B"
- !<string>
val: "C"
...
*这上面和下面有很多文本。
我要提取所有列的A、B和C。但我不确定是怎么回事。我曾尝试使用regexp_substr(),但未能隔离出第一个值。我已尝试:
REGEXP_SUBSTR(col, 'Type\W+(\w+)\W+\w.+\W+\w.+')
哪个选项产生:
Type: a: - !<string> val: "A"
虽然这给出了字符串的第一部分"A",但我只想要一种分别访问"A"、"B"和"C"的方法。
推荐答案
必须分两个阶段提取值;
- 提取以下文档节类型:A:包含所有
val: "data"
。 - 将
"data"
提取为数组或使用REGEXP_SUBSTR()
+indexn提取n元素
SELECT
'Type:\s+\w+:((\s+- !<string>\s+val:\s+"[^"]")+)' type_section_rx
REGEXP_SUBSTR(col, type_section_rx, 1, 1, 'i', 1) vals,
PARSE_JSON('[0' || REPLACE(vals, REGEXP_SUBSTR(vals, '[^"]+'), ', ') || ']') raw_array,
ARRAY_SLICE(raw_array, 1, ARRAY_SIZE(raw_array)) val_array,
val_array[1] B
FROM INPUT_STRING
结果是一个数组,您可以在其中使用索引[0]
等访问第一个值。第一个正则表达式可以缩短为"最小工作量"
'Type:\s+\w+:(([^"]+"[^"]+")+)'
。 这篇关于雪花SQL正则表达式~提取多个VAL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!