如何解决用于获取字符内的字符串的正则表达式,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 举报,一经查实,本站将立刻删除。