[英]Regex for extracting part of a file path
我在Impala中使用正则表达式函数在文件路径中找到文件夹名称,但似乎无法给我正确的结果
我想从此文件路径中解析出“一个”:
/this/one/path/to/hdfs
这是我使用的正则表达式:
regexp_extract(filepath,'[/]+',0)
如果在这里我们希望捕获/
,那么我们可能只想尝试([\\/]+)
。 还应该有其他表达式来提取one
表达式,例如:
(?:\/[a-z]+\/)(.+?)(?:\/.+)
我们的代码可能看起来像:
regexp_extract(filepath, '(?:\/[a-z]+\/)(.+?)(?:\/.+)', 2)
要么
regexp_extract(filepath, '(?:\/.+?\/)(.+?)(?:\/.+)', 2)
在这种情况下,我们没有捕捉背后是什么one
使用非捕获组:
(?:\/[a-z]+\/)
然后我们使用以下命令捕获one
:
(.+?)
最后我们后面添加一个右边界one
在另一个非捕获组:
(?:\/.+)
jex.im可视化正则表达式:
根据该斜线, one
可能的位置,我们可以修改我们的表达。 例如,在这种情况下,此表达式也可能有效:
(?:\/.+?\/)(.+?)(?:\/.+)
最新的Impala版本使用RE2正则表达式库 ,您可以使用regex_extract
函数中的第三个参数轻松访问捕获组值。
使用以下正则表达式:
^/[^/]+/([^/]+)
请参阅regex演示 (请注意,Go regex风味也是RE2,这就是为什么在regex101中选择此选项的原因)。 它匹配
^
-字符串的开头 /
-a /
char(Impala正则表达式字符串中没有正则表达式分隔符,因此无需在模式中转义/
chars) [^/]+
- /
以外的1个或多个字符 /
-一/
炭 ([^/]+)
-捕获组1(要获取它,必须将index
参数设置为1
): /
以外的1个或多个字符 码:
regexp_extract(filepath, '^/[^/]+/([^/]+)', 1)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.