问题描述
我在 Athena 中编写了一个 sql,它使用 regex_extract 从列中提取子字符串,它提取字符串,其中有“X10003”,并在出现空格时占用。例如从 5570 - Site 811111 - X10003-10447-XXX-20443 (CAMP)
中提取 X10003-10447-XXX-20443
并且在 Athena 中使用 REGEXP_EXTRACT(site,'X10033.*?\w+-\d+')
可以正常工作。
现在我将其转换为 sparksql 并且它无法正常工作,我应用了不同的方法但没有任何效果,例如我使用了表达式:
Regexp_extract("5570 - Site 811111 - X10003-10447-XXX-20443 (CAMP)",'X10003([^\s]+)')
给了我 -10447-XXX-20443 (CAMP)
这不是我需要的。
谁能告诉我我做错了什么?
解决方法
你可以使用
REGEXP_EXTRACT(site,'(X10003.*?[A-Za-z0-9]-[0-9]+)',1)
参见regex demo。
(X10003.*?[A-Za-z0-9]-[0-9]+)
模式是一个 捕获组,其 ID 为 1 匹配
-
X10003
- 文字字符串 -
.*?
- 除换行符以外的零个或多个字符,尽可能少 -
[A-Za-z0-9]
- 一个字母数字字符 -
-
- 连字符 -
[0-9]+
- 一位或多位数字。
扩大捕获组:
0
Pineapple
2
3
Pine
5
Apple
Pine
8
9
Pine
Apple
12
Pine
14
15
Pineapple
17
18
Pine
20