[英]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
在另一個非捕獲組:
(?:\/.+)
jex.im可視化正則表達式:
根據該斜線, one
可能的位置,我們可以修改我們的表達。 例如,在這種情況下,此表達式也可能有效:
(?:\/.+?\/)(.+?)(?:\/.+)
最新的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.