regex - 用于在字符中获取字符串的正则表达式,第一个字符集在 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')
请参阅正则表达式演示。
详情:
^
- 字符串的开始(?:[^/]*/)?
- 一个可选的序列,匹配任何零个或多个字符,除了 a/
和一个/
字符([^^]*)
- 捕获组 1(从替换模式中引用$1
):除 a 之外的任何零个或多个字符^
\^
- 文字^
字符.*
- 字符串的其余部分到最后。
推荐阅读
- devops - 升级后地图中的 zabbix-fronend-php 出现问题
- ios - 如何将 AutoLayout 约束的常量设置为超级视图的百分比?
- ios - Xcode - 可以在模拟器上但不能在设备上运行应用程序 - 错误:失败,退出代码 1
- c - 霍夫曼 C 无限循环
- php - Laravel 输出模型按相关表列排序
- php - SimpleXML 在特定条件下加载文件
- windows - 如何在 Windows 下将 Qt5 构建为静态库
- jquery - 如何从下拉列表中复制文本?
- android - Android Oreo 上未添加地理围栏
- performance - 使用 perf_event_open 监控 Docker 容器