用于提取部分文件路径的正则表达式
Regex for extracting part of a file path
我在 Impala 中使用正则表达式函数来查找文件路径中的文件夹名称,但它似乎没有给我正确的结果
我想从这个文件路径中解析出 "one":
/this/one/path/to/hdfs
这是我使用的正则表达式:
regexp_extract(filepath,'[/]+',0)
如果在这里我们想捕获/
,那么我们可能只想尝试([\/]+)
。应该还有其他表达式也可以提取one
,例如:
(?:\/[a-z]+\/)(.+?)(?:\/.+)
我们的代码可能如下所示:
regexp_extract(filepath, '(?:\/[a-z]+\/)(.+?)(?:\/.+)', 2)
或
regexp_extract(filepath, '(?:\/.+?\/)(.+?)(?:\/.+)', 2)
隔间
在这种情况下,我们不会使用 non-capturing 组捕获 one
背后的内容:
(?:\/[a-z]+\/)
然后我们捕获 one
使用:
(.+?)
最后我们在另一个 non-capturing 组的 one
之后添加右边界:
(?:\/.+)
正则表达式电路
jex.im 可视化正则表达式:
DEMO
根据 one
所在的斜线,我们可以修改表达式。例如,在这种情况下,这个表达式也可能有效:
(?:\/.+?\/)(.+?)(?:\/.+)
DEMO
最新 Impala 版本 use RE2 regex library, and you may easily access capturing group values using the third argument in the regex_extract
function。
使用以下正则表达式:
^/[^/]+/([^/]+)
参见 regex demo(注意 Go regex flavor 也是 RE2,这就是为什么在 regex101 选择这个选项)。它匹配
^
- 字符串开头
/
- 一个 /
字符(Impala 正则表达式字符串中没有正则表达式定界符,因此无需转义模式中的 /
个字符)
[^/]+
- /
以外的任何 1 个或多个字符
/
- 一个 /
字符
([^/]+)
- 捕获组 1(要获取它,index
参数必须设置为 1
):任何 1 或/
以外的更多字符
代码:
regexp_extract(filepath, '^/[^/]+/([^/]+)', 1)
我在 Impala 中使用正则表达式函数来查找文件路径中的文件夹名称,但它似乎没有给我正确的结果
我想从这个文件路径中解析出 "one":
/this/one/path/to/hdfs
这是我使用的正则表达式:
regexp_extract(filepath,'[/]+',0)
如果在这里我们想捕获/
,那么我们可能只想尝试([\/]+)
。应该还有其他表达式也可以提取one
,例如:
(?:\/[a-z]+\/)(.+?)(?:\/.+)
我们的代码可能如下所示:
regexp_extract(filepath, '(?:\/[a-z]+\/)(.+?)(?:\/.+)', 2)
或
regexp_extract(filepath, '(?:\/.+?\/)(.+?)(?:\/.+)', 2)
隔间
在这种情况下,我们不会使用 non-capturing 组捕获 one
背后的内容:
(?:\/[a-z]+\/)
然后我们捕获 one
使用:
(.+?)
最后我们在另一个 non-capturing 组的 one
之后添加右边界:
(?:\/.+)
正则表达式电路
jex.im 可视化正则表达式:
DEMO
根据 one
所在的斜线,我们可以修改表达式。例如,在这种情况下,这个表达式也可能有效:
(?:\/.+?\/)(.+?)(?:\/.+)
DEMO
最新 Impala 版本 use RE2 regex library, and you may easily access capturing group values using the third argument in the regex_extract
function。
使用以下正则表达式:
^/[^/]+/([^/]+)
参见 regex demo(注意 Go regex flavor 也是 RE2,这就是为什么在 regex101 选择这个选项)。它匹配
^
- 字符串开头/
- 一个/
字符(Impala 正则表达式字符串中没有正则表达式定界符,因此无需转义模式中的/
个字符)[^/]+
-/
以外的任何 1 个或多个字符
/
- 一个/
字符([^/]+)
- 捕获组 1(要获取它,index
参数必须设置为1
):任何 1 或/
以外的更多字符
代码:
regexp_extract(filepath, '^/[^/]+/([^/]+)', 1)