用于提取部分文件路径的正则表达式
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 文件中提取图像的所有路径的正则表达式
自动化办公:手机号码提取器,使用正则表达式轻松提取文本文件中的手机号码