用于在字符中获取字符串的正则表达式,第一个字符集在 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 中是可选的的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式仅获取php中的第一个字符[关闭]

用于第一个匹配字符串的 Java 正则表达式

SQL中的正则表达式子字符串在两个字符分隔符上

JavaScript正则表达式修饰符

JS中字符串操作,生成随机数,正则表达式

如何在 Hive 中构建正则表达式以获取字符串,直到第 N 次出现分隔符