2012-02-20 96 views
12

提取文件名我需要提取剛剛從以下路徑的文件名(無文件擴展名)....正則表達式從路徑

\\my-local-server\path\to\this_file may_contain-any&character.pdf

我已經試過幾件事情,大多數基於關閉的東西像http://regexr.com?302m5但不能完全得到有

+3

哪種語言?有些語言有一種方法來解析標準庫中的URI。 – 2012-02-20 14:59:53

+0

'。* \\(。+?)\。pdf' – kev 2012-02-20 15:07:39

+2

我很懷疑正則表達式會比獲取最後一個路徑分隔符的索引更快,但我可能是錯的。 – 2014-07-15 23:18:12

回答

21
^\\(.+\\)*(.+)\.(.+)$ 

改進模式此正則表達式進行了測試這兩個例子:

\變種\ WWW \ www.example.com \的index.php
\的index.php

首先塊 「(。+ \)*」 目錄路徑相匹配。
第二個塊「(。+)」與沒有擴展名的文件名匹配。
第三個塊「(。+)$」匹配擴展名。

4

嘗試this

[^\\]+(?=\.pdf$) 

它匹配一切,除了反斜槓後面跟着.pdf在字符串的末尾。

你也可以(也許它甚至更好)把你想成捕獲組這樣的部分:

([^\\]+)\.pdf$ 

但是如何你是指這個團體(括號中的一部分)取決於語言或正在使用的正則表達式風味。在大多數情況下,它將會像$1\1那樣不起作用,或者庫將提供一些在正則表達式匹配後按照其編號獲取捕獲組的方法。

+0

應該更像是:'[^ \\](。+)\。pdf $' – macduff 2012-02-20 15:02:50

+0

@macduff問題也是路徑或文件名..? – noob 2012-02-20 15:09:33

+0

我明白它是文件名,但不是擴展名或路徑,如果我誤解了,很抱歉。 – macduff 2012-02-20 15:11:44

6

這將得到文件名,但也會得到點。您可能需要在代碼中截斷最後一位數字。

[\w-]+\. 

更新

如果你在文件名稱中的空格@Geoman然後用下面

[ \w-]+\.  (space added in brackets) 

Demo

+0

失敗:'c:\ fakepath \某些文件名與spaces.png' – 2017-04-03 12:23:27

+0

@GeomanYabes更新了用於捕獲文件名空間的答案 – 2017-04-05 15:35:37

3

如果有人正在尋找一個窗口絕對路徑(和相對路徑)在javascript JavaScript正則表達式的文件:

var path = "c:\\my-long\\path_directory\\file.html"; 


((/(\w?\:?\\?[\w\-_\\]*\\+)([\w-_]+)(\.[\w-_]+)/gi).exec(path); 

輸出是:

[ 
"c:\my-long\path_directory\file.html", 
"c:\my-long\path_directory\", 
"file", 
".html" 
] 
0

這裏有一個輕微修改Angelo的優秀回答允許路徑中的空格,文件名和擴展名以及缺失部分:

function parsePath (path) { 
    var parts = (/(\w?\:?\\?[\w\-_ \\]*\\+)?([\w-_ ]+)?(\.[\w-_ ]+)?/gi).exec(path); 
    return { 
     path: parts[0] || "", 
     folder: parts[1] || "", 
     name: parts[2] || "", 
     extension: parts[3] || "", 
    }; 
} 
0

這是在Windows上運行的替代/ UNIX:

"^(([A-Z]:)?[\.]?[\\{1,2}/]?.*[\\{1,2}/])*(.+)\.(.+)"

第一塊:路徑
第二塊:虛擬
第三塊:文件名
第四塊:擴展

測試上:

".\var\www\www.example.com\index.php" 
"\var\www\www.example.com\index.php" 
"/var/www/www.example.com/index.php" 
"./var/www/www.example.com/index.php" 
"C:/var/www/www.example.com/index.php" 
"D:/var/www/www.example.com/index.php" 
"D:\\var\\www\\www.example.com\\index.php" 
"\index.php" 
"./index.php" 
1

這只是一個輕微在@ HMD變化是如此,你不必截斷.

[ \w-]+?(?=\.) 

Demo

真的,感謝送給@hmd。我只是稍微改進了一下。

0

這個正則表達式提取文件的擴展名,如果組3不爲空,它就是擴展名。

.*\\(.*\.(.+)|.*$)