正则表达式/红移

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)

【讨论】:

以上是关于正则表达式/红移的主要内容,如果未能解决你的问题,请参考以下文章

如何在红移中进行动态正则表达式匹配?

如何选择特定范围(使用红移正则表达式)

红移正则表达式匹配

红移中的正则表达式

亚马逊红移中的 SQL 正则表达式 substr 函数

使用 SQL 的 Amazon Redshift 中的正则表达式