redshift sql使用正则表达式从字符串中获取第一、第二、第三个值,如下所示
Posted
技术标签:
【中文标题】redshift sql使用正则表达式从字符串中获取第一、第二、第三个值,如下所示【英文标题】:redshift sql using regular expression to get first, second, third values from a string which is like following 【发布时间】:2018-06-29 08:55:16 【问题描述】:模式:d0=123;d1=134;d2=123;d3=13;d4=33;d5=44;d6=55;
如果想得到=
&
;
之间的第一个数字
output:
123
如果我想在=
&
;
之间获得第二次出现
output:
134
使用的正则表达式:
select
regexp_substr(' d0=123;d1=134;d2=123;d3=13;d4=33;d5=44;d6=55;','d[0-9]+=' ,1,2) as b;
但输出是这样的:
d1=
任何指向这个方向的指针都会有所帮助。
【问题讨论】:
Amazon Redshiftregex_substr
似乎不支持捕获组提取。尝试regexp_replace(s, '.*;d1=([^;]+).*', '\1')
提取d1
值。
选择 regexp_substr('d0=123;d1=134;d2=123;d3=13;d4=33;d5=44;d6=55;', '(d[0-9] +=[0-9]+;)',1,7) 作为 b;这给出的输出为:: d6=55;我仍然试图避免 d6&;从上面的输出
你能不能把所有的 = 换成 ;,然后用 split_part(yourstring,';',2) 再用 4 作为下一个值?
【参考方案1】:
另一种方法是改用 regex_substr
regex_substr(s,'[^d=;]*[0-9]+[^;=d]',1,2)
根据需要增加/减少整数值 2。
【讨论】:
这不会匹配一位数字,例如d0=3;
@WiktorStribiżew 这是已知的限制,但由于红移正则表达式不支持非捕获块..别无选择以上是关于redshift sql使用正则表达式从字符串中获取第一、第二、第三个值,如下所示的主要内容,如果未能解决你的问题,请参考以下文章
Redshift:如何从字符串列表中匹配最长的正则表达式字符串
正则表达式在 Redshift 中将 CamelCase 转换为蛇形案例
使用 SQL 的 Amazon Redshift 中的正则表达式
Redshift / 正则表达式(Positive Lookbehind 和 Positive Lookahead)不起作用