微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用于获取字符内的字符串的正则表达式,Presto/Athena 中的第一个字符集是可选的

如何解决用于获取字符内的字符串的正则表达式,Presto/Athena 中的第一个字符集是可选的

我整天都在纠结这个问题。我让它在各种在线正则表达式工具中工作,但每当我在查询中使用它时,结果都是错误的。

我的数据库中有这样的数据:

AMAZON PAYMENTS EUROPE S.C.A.
1/asdfL GE#EFRDA^9212 GRIFF
Frau HUSEL G^9212 GRIFF

我想提取 1/^ 中存在的文本。像这样:

AMAZON PAYMENTS EUROPE S.C.A.
asdfL GE#EFRDA
Frau HUSEL G

我尝试了很多变体,它们都可以在线运行:

  • 非捕获组:^(?:1\/)?(.*?(?=\^|$))
  • 向后看:(?<=1\/)(.*?(?=\^|$))
  • 条件表达式:(?(?=^1)1/(.*?(?=\^|$))|((^.*?(?=\^|$))))

但是当我在 AWS 中运行查询时,我总是会在提取物中取回 1/

有人知道如何解决这个问题吗?

解决方法

我会在这里使用 REGEXP_REPLACE

regexp_replace([column],'^(?:[^/]*/)?([^^]*)\^.*','$1')

参见regex demo

详情

  • ^ - 字符串的开始
  • (?:[^/]*/)? - 一个可选序列,匹配除 // 字符以外的任何零个或多个字符
  • ([^^]*) - 捕获组 1(从带有 $1 的替换模式中引用):除 ^ 之外的任何零个或多个字符
  • \^ - 文字 ^ 字符
  • .* - 字符串的其余部分。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。