Pyspark SparkSQL 正则表达式在空格前获取子字符串

问题描述

我在 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