用于在字符中获取字符串的正则表达式,第一个字符集在 Presto/Athena 中可选
Regex for getting a string within characters, with first character set optional in 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], '^(?:[^/]*/)?([^^]*)\^.*', '')
参见regex demo。
详情:
^
- 字符串开头
(?:[^/]*/)?
- 可选序列匹配除 /
之外的任何零个或多个字符,然后是 /
字符
([^^]*)
- 捕获第 1 组(从 </code> 的替换模式中引用):除 <code>^
之外的任何零个或多个字符
\^
- 文字 ^
字符
.*
- 字符串的其余部分到末尾。
我整天都在为这个问题苦思冥想。我让它在各种在线正则表达式工具中工作,但每当我在查询中使用它时,结果都是错误的。
我的数据库中有这样的数据:
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], '^(?:[^/]*/)?([^^]*)\^.*', '')
参见regex demo。
详情:
^
- 字符串开头(?:[^/]*/)?
- 可选序列匹配除/
之外的任何零个或多个字符,然后是/
字符([^^]*)
- 捕获第 1 组(从</code> 的替换模式中引用):除 <code>^
之外的任何零个或多个字符
\^
- 文字^
字符.*
- 字符串的其余部分到末尾。