pyspark sparksql regex在空格前获取子字符串

2w2cym1i  于 2021-06-30  发布在  Java
关注(0)|答案(3)|浏览(514)

我在athena中编写了一个sql,它使用regex\u extract从列中提取子字符串,它提取字符串,其中有“x10003”,并在空格出现时占用。例如来自 5570 - Site 811111 - X10003-10447-XXX-20443 (CAMP) 它提取 X10003-10447-XXX-20443 它可以很好地使用 REGEXP_EXTRACT(site, 'X10033.*?\w+-\d+') 在雅典娜。
现在我将其转换为sparksql,但它不能正常工作,我应用了不同的方法,但没有任何效果,例如我使用了expression: Regexp_extract("5570 - Site 811111 - X10003-10447-XXX-20443 (CAMP)", 'X10003([^\s]+)') 给了我 -10447-XXX-20443 (CAMP) 这不是我所需要的。
有人能告诉我我做错了什么吗?

mrwjdhj3

mrwjdhj31#

扩大捕获组:

Regexp_extract("5570 - Site 811111 - X10003-10447-XXX-20443 (CAMP)", '(X10003[^\s]+)')

# here ___^
m4pnthwp

m4pnthwp2#

你可以用

REGEXP_EXTRACT(site, '(X10003.*?[A-Za-z0-9]-[0-9]+)', 1)

查看regex演示。
这个 (X10003.*?[A-Za-z0-9]-[0-9]+) 模式是id为1的捕获组 X10003 -文字字符串 .*? -除换行符以外的零个或多个字符,尽可能少 [A-Za-z0-9] -字母数字字符 - -连字符 [0-9]+ -一个或多个数字。

piah890a

piah890a3#

这有用吗?似乎需要两个反斜杠来转义反斜杠,而且还需要将要提取的组 Package 在括号中。

REGEXP_EXTRACT(site, '(X10003.*?\\w+-\\d+)', 1)

例如,

spark-sql> select regexp_extract( '5570 - Site 811111 - X10003-10447-XXX-20443 (CAMP)', '(X10003.*?\\w+-\\d+)', 1);
X10003-10447-XXX-20443

相关问题