用于提取部分文件路径的regex

tv6aics1  于 2021-06-26  发布在  Impala
关注(0)|答案(2)|浏览(469)

我在impala中使用regex函数来查找文件路径中的文件夹名,但它似乎没有给出正确的结果
我想从这个文件路径中解析出“一”:

/this/one/path/to/hdfs

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

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

oiopk7p51#

最新的impala版本使用re2 regex库,您可以使用 regex_extract 功能。
使用以下正则表达式:

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

请参阅regex演示(注意,go regex flavor也是re2,这就是为什么在regex101中选择此选项的原因)。它匹配 ^ -字符串开头 / -a / char(impala regex字符串中没有regex分隔符,因此不需要转义 / 图案中的字符) [^/]+ -任何一个或多个字符
/ / -a / 烧焦 ([^/]+) -捕获组1(要获得它 index 参数必须设置为 1 ):除 / 代码:

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

hi3rlvi22#

如果我们想抓住 / ,那么我们可能只是想试试 ([\/]+) . 应该还有其他表达式要提取 one 此外,例如:

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

我们的代码可能看起来像:

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

或者

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

隔室

在这种情况下,我们没有捕捉到背后的东西 one 使用非捕获组:

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

然后我们抓住 one 使用:

(.+?)

最后我们在后面加一个右边界 one 在另一个非捕获组中:

(?:\/.+)

正则表达式电路

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

演示

取决于哪个斜杠, one 我们可以修改我们的表达式。例如,在本例中,此表达式也可能起作用:

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

演示

相关问题