2013-07-20 14 views
0

我的程序讀入一個字符串列表,其中包含位於網絡驅動器上的文件和文件夾名稱。什麼正則表達式將只返回網絡驅動器名稱?

這裏是什麼我列表可以包含一些例子:

\\NETWORKDRIVE\text1.txt 
\\NETWORKDRIVE\\text2.txt 
\\NETWORKDRIVE\foldername\text3.txt 
\\NETWORKDRIVE\\ 
\\NETWORKDRIVE\ 
\\NETWORKDRIVE 

我需要一個正則表達式只返回網絡驅動器名稱(包括領先的「\」字符)。

我已經嘗試過各種正則表達式,並且找到了一個幾乎可以工作的表達式。這是我目前的:

^(\\+)(.*?)(\\+) 

這個正則表達式有兩個問題。

第一個問題是它匹配網絡驅動器名稱尾隨的「\」字符。第二個問題是,如果網絡驅動器名稱不以任何「\」字符結尾,它只能匹配前導的「\」字符。

這裏是我的結果證明:

\\NETWORKDRIVE\text1.txt => \\NETWORKDRIVE\ 
\\NETWORKDRIVE\\test2.txt => \\NETWORKDRIVE\\ 
\\NETWORKDRIVE\foldername\text3.txt => \\NETWORKDRIVE\ 
\\NETWORKDRIVE\\ => \\NETWORKDRIVE\\ 
\\NETWORKDRIVE\ => \\NETWORKDRIVE\ 
\\NETWORKDRIVE => \\ 

正如你所看到的,我沒有得到我想要的結果。我只是想要的結果是:

\\NETWORKDRIVE 

所有情況。

任何人都可以幫助我修改和/或更改我的正則表達式來執行我需要的操作嗎?

非常感謝。

+0

你用什麼語言的所有字符? –

+0

那麼我的程序是C#,我使用Regex.Match(fileName,pattern),但我正在使用正則表達式測試網站(http://regexpal.com)進行測試。 –

+0

你可以在這裏找到一個.net正則表達式測試器:http://regexstorm.net/tester –

回答

1

您可以使用此:

^\\{2}[^\\]+ 

[^\\]意味着除了反斜槓

+0

我正在使用在線正則表達式測試程序(http://regexpal.com),當我使用您的正則表達式時,結果是相同的*除*它在最後一種情況下工作,其中文件夾名稱是\\ NETWORKDRIVE它返回\\ NETWORKDRIVE。 –

+0

@JanTacci:對不起,我沒有閱讀你的整篇文章,現在重試。 –

+0

啊,那有效!你介意解釋{2}做什麼?謝謝! –

相關問題