"blahblah\dummytext\_config.bat"
如果我想從這個字符串中獲取_config.bat,那麼最好的方法是什麼?只有我能想到的方式是從.bat讀回它找到的第一個斜線,但我不知道該怎麼做。你可以在正則表達式中閱讀嗎?
"blahblah\dummytext\_config.bat"
如果我想從這個字符串中獲取_config.bat,那麼最好的方法是什麼?只有我能想到的方式是從.bat讀回它找到的第一個斜線,但我不知道該怎麼做。你可以在正則表達式中閱讀嗎?
如果你想擁有的最後一個反斜槓後的一切,你可以使用下面的正則表達式:
.*\\(.*)
捕獲組會得到你想要的結果。因爲默認情況下,第一個*是貪婪的,它會盡可能地匹配,因此也會消耗除最後一個之外的任何反斜槓(因爲不會再有匹配成爲可能)。
這個wou ld在上面的字符串中沒有匹配。 – FlyingStreudel
@FlyingStreudel它匹配(請參閱[這裏](http://ideone.com/Y6FhK)) – Howard
您的答案中有2個正斜槓。把它們拿出來就可以了。 – FlyingStreudel
你可以找到爲lastIndexOf方法的最後一個反斜槓:
int index = myString.LastIndexOf(@"\");
string result = myString.SubString(index + 1);
丹尼爾有一個好點。使用FileInfo的將是一個更安全的方式,很容易使用:
// myString doesn't need a full path either
System.IO.FileInfo fi = new System.IO.FileInfo(myString);
// returns just the file name without the path
string result = fi.Name;
並代理-J的提示:
string result = System.IO.Path.GetFileName(myString);
如果路徑想要一個完整的路徑或不,我不知道。 FileInfo和Path都接受不存在的路徑和文件名。
+ 1爲簡單和效率。 – FlyingStreudel
+1在不需要時不使用正則表達式。 –
如果它是一個文件名,爲什麼使用子字符串時'Path.GetFileName'會工作? +1無論如何 –
'$'匹配一行的結尾。所以,這個正則表達式會匹配一行或多行不是反斜線的字符,即您的示例字符串中的'_config.bat'。
[^\\]+$
下面就來看看背後的斜線(?<=\\)
正則表達式的方法:
string fileName = @"blah\blah\_config.bat";
Regex.Match(fileName, @"(?<=\\)[^\\]+$"));
但是,如果你在談論一個文件名,只需使用
string relativePath = @"blah\blah\_config.bat";
string fileName = Path.GetFileName(relativePath);
除非你想過濾出像「_config.bat」這樣的字符串,而在它們中沒有反斜槓,那麼這個後面是一個不必要的複雜。無論如何,我們應該鼓勵OP **而不是**以「落後」的方式來思考。 (具有諷刺意味的是,.NET確實支持無縫的從右到左的匹配,這是我知道的唯一的風格,但這不是這個工作的正確工具。) –
嘗試RegexOptions.RightToLeft;欲瞭解更多信息請點擊此鏈接:https://msdn.microsoft.com/en-us/library/yd1hzczs%28v=vs.110%29.aspx
反向輸入字符串,正則表達式反向百通,...(: 但更嚴重的是,/\\.*?\.bat/將正則表達式的類型,你正在尋找或者使用類似/\\[^\\]\.bat/。 –
爲什麼不使用建立的路徑類? –
'/.*\\(((*)$/'然後最後的所有內容反斜槓將在捕獲組1中,不知道如何在C#中執行它,但是,當你可以使用內建的類時 – NorthGuard