我在impala中使用regex函数来查找文件路径中的文件夹名,但它似乎没有给出正确的结果我想从这个文件路径中解析出“一”:
/this/one/path/to/hdfs
这是我使用的正则表达式:
regexp_extract(filepath,'[/]+',0)
oiopk7p51#
最新的impala版本使用re2 regex库,您可以使用 regex_extract 功能。使用以下正则表达式:
regex_extract
^/[^/]+/([^/]+)
请参阅regex演示(注意,go regex flavor也是re2,这就是为什么在regex101中选择此选项的原因)。它匹配 ^ -字符串开头 / -a / char(impala regex字符串中没有regex分隔符,因此不需要转义 / 图案中的字符) [^/]+ -任何一个或多个字符/ / -a / 烧焦 ([^/]+) -捕获组1(要获得它 index 参数必须设置为 1 ):除 / 代码:
^
/
[^/]+
([^/]+)
index
1
regexp_extract(filepath, '^/[^/]+/([^/]+)', 1)
hi3rlvi22#
如果我们想抓住 / ,那么我们可能只是想试试 ([\/]+) . 应该还有其他表达式要提取 one 此外,例如:
([\/]+)
one
(?:\/[a-z]+\/)(.+?)(?:\/.+)
我们的代码可能看起来像:
regexp_extract(filepath, '(?:\/[a-z]+\/)(.+?)(?:\/.+)', 2)
或者
regexp_extract(filepath, '(?:\/.+?\/)(.+?)(?:\/.+)', 2)
在这种情况下,我们没有捕捉到背后的东西 one 使用非捕获组:
(?:\/[a-z]+\/)
然后我们抓住 one 使用:
(.+?)
最后我们在后面加一个右边界 one 在另一个非捕获组中:
(?:\/.+)
jex.im可视化正则表达式:
取决于哪个斜杠, one 我们可以修改我们的表达式。例如,在本例中,此表达式也可能起作用:
(?:\/.+?\/)(.+?)(?:\/.+)
2条答案
按热度按时间oiopk7p51#
最新的impala版本使用re2 regex库,您可以使用
regex_extract
功能。使用以下正则表达式:
请参阅regex演示(注意,go regex flavor也是re2,这就是为什么在regex101中选择此选项的原因)。它匹配
^
-字符串开头/
-a/
char(impala regex字符串中没有regex分隔符,因此不需要转义/
图案中的字符)[^/]+
-任何一个或多个字符/
/
-a/
烧焦([^/]+)
-捕获组1(要获得它index
参数必须设置为1
):除/
代码:hi3rlvi22#
如果我们想抓住
/
,那么我们可能只是想试试([\/]+)
. 应该还有其他表达式要提取one
此外,例如:我们的代码可能看起来像:
或者
隔室
在这种情况下,我们没有捕捉到背后的东西
one
使用非捕获组:然后我们抓住
one
使用:最后我们在后面加一个右边界
one
在另一个非捕获组中:正则表达式电路
jex.im可视化正则表达式:
演示
取决于哪个斜杠,
one
我们可以修改我们的表达式。例如,在本例中,此表达式也可能起作用:演示