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

Posted

技术标签:

【中文标题】用于提取部分文件路径的正则表达式【英文标题】:Regex for extracting part of a file path 【发布时间】:2019-05-26 00:52:00 【问题描述】:

我在 Impala 中使用正则表达式函数在文件路径中查找文件夹名称,但它似乎没有给我正确的结果

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

/this/one/path/to/hdfs

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

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

【问题讨论】:

【参考方案1】:

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

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

我们的代码可能如下所示:

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

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

隔间

在这种情况下,我们没有使用非捕获组捕获 one 背后的内容:

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

然后我们捕获one 使用:

(.+?)

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

(?:\/.+)

正则表达式电路

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

DEMO

根据可能位于哪个斜线,one,我们可以修改我们的表达式。例如,在这种情况下,这个表达式也可能起作用:

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

DEMO

【讨论】:

【参考方案2】:

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

使用以下正则表达式:

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

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

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

代码:

regexp_extract(filepath, '^/[^/]+/([^/]+)', 1)

【讨论】:

以上是关于用于提取部分文件路径的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

用于提取要匹配的某些部分的正则表达式

PHP - 从 CSS 文件中提取图像的所有路径的正则表达式

使用正则表达式提取文件路径并将其保存在python中

自动化办公:手机号码提取器,使用正则表达式轻松提取文本文件中的手机号码

用于 bigquery 的正则表达式在 /api 之后返回所有路径

将RegEx(正则表达式提取器)与JMeter一起使用