regex - 如何通过 Redshift psql 提取正则表达式组

标签 regex amazon-web-services amazon-redshift psql

我在 python 和 Redshift psql 上尝试过的相同正则表达式模式适用于 python,但不适用于 Redshift psql。

我的字符串看起来像这样: s = 'AB.w127 xyz (9f6h, 89) amf, like mr .345x980 abcd' 我想提取“AB”和“.345x980”之间的所有内容(“w127 xyz (9f6h, 89) amf,就像本例中的 mr ”),这里相乘的数字会有所不同,并且内容两者之间是完全不可预测的。 因此,在我的 Redshift psql 查询中,我使用了 regexp_substr(s, 'AB\.(.*?)\.\d+x\d+.*?') 。我希望至少能得到一些东西,以便以后我可以使用 group(1)作为Python逻辑。

但是 Redshift 一直向我显示此错误:

Invalid preceding regular expression prior to repetition operator. The error occured while parsing the regular expression: 'AB.(.?>>>HERE>>>).d+xd+.?'.

我还尝试了模式 AB\\.(.*?)\\.\\d+x\\d+.*?') ,但仍然遇到同样的错误。

是否可以使用 Redshift psql 提取字符串?

最佳答案

不幸的是,Amazon Redshift 仅具有 POSIX regex不支持惰性量词。

也就是说,看起来您不需要它们,AB\.(.*)\.\d+x\d+ 应该可以。


关于您的问题如何提取中间的文本,我们对 Redshift 的正则表达式功能几乎没有选择。 All 大多数好东西都是不受支持的。最好先提取,然后使用 CHARINDEXSUBSTRING 来隔离内部部分。

但是,最后一个技巧是使用

regexp_replace( text, '.*AB\.|\.\\d+x\\d+.*') 

如链接文档中所述,POSIX 样式\d 字符类必须使用两个反斜杠 (\\) 或使用等效的字符类表达式,例如[[:数字:]]

关于regex - 如何通过 Redshift psql 提取正则表达式组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50224201/

相关文章:

python - 使用正则表达式Python根据模式提取部分字符串

regex - 为什么 [01-12] 范围没有按预期工作?

javascript - 如何使用 Node.js 向 AWS 发出经过身份验证的请求?

javascript - 如何使用 jquery 从链接中选择 href 属性?

正则表达式匹配除引号之间的单词之外的所有内容

amazon-web-services - 当前的AWS身份不是Sagemaker的角色吗?

amazon-web-services - DynamoDB Marshal 和 unmarshal golang time.Time 自纪元以来以毫秒为单位

postgresql - Amazon Redshift - SQL - 在多个 ROW_NUMBER() ORDER BY 子句中调用时 RANDOM() 的行为

amazon-web-services - 在 redshift 外部表的选择查询上获取频谱扫描错误代码 15007