红移中的正则表达式

Posted

技术标签:

【中文标题】红移中的正则表达式【英文标题】:Regex in redshift 【发布时间】:2018-09-10 16:45:30 【问题描述】:

我有问题..我需要从这个字段中提取:

exchange<=><br>type<=>full<br>cont<=>part<br>req<=>no<br>money<=>money<br>money<=>3100,4000,0,month<br>boss<=>0

五个信息:

    full part 3100 4.4000 5.month

我曾尝试使用 regexp_substr(): regexp_substr(column,'type&lt;=&gt;[^&lt;br&gt;]*') 但我对正则表达式一无所知,我无法以正确的方式做到这一点.. 你能帮我吗?

【问题讨论】:

尝试regexp_substr(column,'type&lt;=&gt;([a-zA-Z0-9]+)') 或尝试[^&lt;]+ 而不是[a-zA-Z0-9]+ 是的,它适用于 type 和 cont :) 我的结果(typefull)和(contpart),但它不适用于 3100、4000 和月份.. 啊哈,所以你想要单独的正则表达式,对吧? regexp_substr(column,'type&lt;=&gt;([^&lt;]+)')regexp_substr(column,'cont&lt;=&gt;([^&lt;]+)'),然后是 money&lt;=&gt;([0-9]+)money&lt;=&gt;[0-9]+,([0-9]+)money&lt;=&gt;[0-9]+,[0-9]+,[0-9]+,([^&lt;]+) 当涉及到:money&lt;=&gt;([0-9]+) 4000 我的输入:money&lt;=&gt;3500,4000 和当涉及到month 我的输入: money&lt;=&gt;3100,4000,0,month 您确定将捕获括号放在我放置的位置吗? 【参考方案1】:

我从未使用过 redshift,但使用 regex 我可以帮助您:

"(type|cont|money)<=>([^<,]+)(,([^<,]+),[^<,]+,([^<,]+))?"

您作为示例输入的字符串中的捕获编号 4 它将捕获您需要的所有内容,甚至排除 0 :

第 1 组:金钱 第 2 组:3100 第 3 组:,4000,0,月 第 4 组:4000 第五组:月

如果您有问题,请告诉我。 如果你想掌握我可以教你的正则表达式技能,它会很有用。

【讨论】:

等一下,我会解决的 看这个链接,***.com/questions/7758859/…你必须指定你想要的捕获组,在那种情况下是第二个,我猜,因为我不能在redshift中尝试这个正则表达式 在最后一种情况下,您需要指定您想要组 2 、 4 和 5 这里解释得更好:w3resource.com/oracle/character-functions/…

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

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

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

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

正则表达式/红移

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

红移正则表达式匹配