正则表达式/红移
Posted
技术标签:
【中文标题】正则表达式/红移【英文标题】:Regular expression/ Redshift 【发布时间】:2015-03-13 06:11:36 【问题描述】:我有以下数据,我如何找到第 11 次出现的 ':' 。我想在第 11 次出现“:”后打印/显示信息。
https://www.example.com/rest/1/07/myself/urn:ads:accod:org:pki:71E4/Riken/List:abc:bcbc:hfhhf:ncnnc:shiv:hgh:bvbv:hghg:
我尝试过 [^] 标签,但它不起作用。
select regexp_substr(id,'[:]5?.*') from tempnew;
【问题讨论】:
请包含您想要的结果。 【参考方案1】:regexp_substr
不关心捕获组,因此无法计算匹配中未包含的字符。不过,从最后数数会起作用:
-- Returns the substring after the 6th ':' from the end.
select regexp_substr(id, '([^:]*:)5[^:]*$') from tempnew
-- If the string does not contain 5 ':', an empty string is returned.
如果您需要从头开始计数,您可以改用regexp_replace
:
-- Returns the substring after the 11th ':'
select regexp_replace(id, '^([^:]*:)11') from tempnew
-- If the string does not contain 11 ':', the whole string is returned.
【讨论】:
【参考方案2】:看这个演示https://regex101.com/r/wR9aU3/1
/^(?:[^:]*\:)11(.*)$/
或
/^(?:.+\:)11(.+)$/gm
https://regex101.com/r/oC5yQ6/1
【讨论】:
【参考方案3】:我会拆分“:”并使用第 11 个元素。
但如果你必须使用正则表达式:
^(?:[^:]*:)10:([^:]*)
并使用比赛的第 1 组。
【讨论】:
【参考方案4】:您可以为此目的使用 split_part, 从 tempnew 中选择 split_part(id, ':', 12)
【讨论】:
以上是关于正则表达式/红移的主要内容,如果未能解决你的问题,请参考以下文章