簡體   English   中英

正則表達式,用於提取文件路徑的一部分

[英]Regex for extracting part of a file path

我在Impala中使用正則表達式函數在文件路徑中找到文件夾名稱,但似乎無法給我正確的結果

我想從此文件路徑中解析出“一個”:

/this/one/path/to/hdfs

這是我使用的正則表達式:

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

如果在這里我們希望捕獲/ ,那么我們可能只想嘗試([\\/]+) 還應該有其他表達式來提取one表達式,例如:

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

我們的代碼可能看起來像:

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

要么

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

車廂

在這種情況下,我們沒有捕捉背后是什么one使用非捕獲組:

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

然后我們使用以下命令捕獲one

(.+?)

最后我們后面添加一個右邊界one在另一個非捕獲組:

(?:\/.+)

RegEx電路

jex.im可視化正則表達式:

在此處輸入圖片說明

DEMO

根據該斜線, one可能的位置,我們可以修改我們的表達。 例如,在這種情況下,此表達式也可能有效:

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

DEMO

最新的Impala版本使用RE2正則表達式庫 ,您可以使用regex_extract函數中的第三個參數輕松訪問捕獲組值。

使用以下正則表達式:

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

請參閱regex演示 (請注意,Go regex風味也是RE2,這就是為什么在regex101中選擇此選項的原因)。 它匹配

  • ^ -字符串的開頭
  • / -a / char(Impala正則表達式字符串中沒有正則表達式分隔符,因此無需在模式中轉義/ chars)
  • [^/]+ - /以外的1個或多個字符
  • / -一/
  • ([^/]+) -捕獲組1(要獲取它,必須將index參數設置為1 ): /以外的1個或多個字符

碼:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM