正则表达式,用于提取文件路径的一部分

时间:2019-05-26 00:52:00

标签: regex regex-lookarounds impala regex-greedy nsregularexpression

我正在Impala中使用正则表达式功能在文件路径中找到文件夹名称,但似乎无法给我正确的结果

我想从此文件路径中解析出“一个”:

/this/one/path/to/hdfs

这是我使用的正则表达式:

regexp_extract(filepath,'[/]+',0)

2 个答案:

答案 0 :(得分:1)

如果在这里我们希望捕获/,那么我们可能只想尝试([\/]+)。还应该有其他表达式来提取one,例如:

(?:\/[a-z]+\/)(.+?)(?:\/.+)

,我们的代码可能类似于:

regexp_extract(filepath, '(?:\/[a-z]+\/)(.+?)(?:\/.+)', 2)

regexp_extract(filepath, '(?:\/.+?\/)(.+?)(?:\/.+)', 2)

隔室

在这种情况下,我们不会使用非捕获组捕获one后面的内容:

(?:\/[a-z]+\/)

然后我们使用以下命令捕获one

(.+?)

最后,我们在另一个one之后的另一个非捕获组中添加了一个右边界:

(?:\/.+)

RegEx电路

jex.im可视化正则表达式:

enter image description here

DEMO

根据one可能位于的斜线,我们可以修改表达式。例如,在这种情况下,该表达式也可能有效:

(?:\/.+?\/)(.+?)(?:\/.+)

DEMO

答案 1 :(得分:1)

最新的Impala版本use RE2 regex library,并且您可以使用regex_extract function中的第三个参数轻松访问捕获组值。

使用以下正则表达式:

^/[^/]+/([^/]+)

请参见regex demo(请注意,Go regex风味也是RE2,这就是在regex101中选择此选项的原因)。匹配

  • ^-字符串的开头
  • /-一个/字符(Impala正则表达式字符串中没有正则表达式定界符,因此无需在模式中转义/个字符)
  • [^/]+-除/以外的任何1个或多个字符
  • /-一个/字符
  • ([^/]+)-捕获组1(要获取它,必须将 index 参数设置为1):除{以外的任何1个或多个字符{1}}

代码:

/