用于在字符中获取字符串的正则表达式,第一个字符集在 Presto/Athena 中是可选的
Posted
技术标签:
【中文标题】用于在字符中获取字符串的正则表达式,第一个字符集在 Presto/Athena 中是可选的【英文标题】:Regex for getting a string within characters, with first character set optional in Presto/Athena 【发布时间】:2021-06-03 09:23:54 【问题描述】:我一整天都在琢磨这个。我让它在各种在线正则表达式工具中工作,但每当我在查询中使用它时,结果都是错误的。
我的数据库中有这样的数据:
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/
。
有人知道如何解决这个问题吗?
【问题讨论】:
您在使用 Presto 吗?REGEXP_REPLACE
?
【参考方案1】:
我会在这里使用REGEXP_REPLACE
:
regexp_replace([column], '^(?:[^/]*/)?([^^]*)\^.*', '$1')
请参阅regex demo。
详情:
^
- 字符串开头
(?:[^/]*/)?
- 一个可选序列,匹配除 /
和 /
字符之外的任何零个或多个字符
([^^]*)
- 捕获组 1(参考 $1
的替换模式):除 ^
之外的任何零个或多个字符
\^
- 文字 ^
char
.*
- 字符串的其余部分到末尾。
【讨论】:
以上是关于用于在字符中获取字符串的正则表达式,第一个字符集在 Presto/Athena 中是可选的的主要内容,如果未能解决你的问题,请参考以下文章