你能用正则表达式向后看吗?

时间:2011-06-28 18:33:06

标签: c# regex

"blahblah\dummytext\_config.bat"

如果我想从这个字符串中获取_config.bat,那么最好的方法是什么?只有我能想到的方法是从.bat读回到它找到的第一个斜杠但我不知道该怎么做。

5 个答案:

答案 0 :(得分:5)

您可以使用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 );

我不确定Path是否想要一条完整的路径。 FileInfo和Path都接受不存在的路径和文件名。

答案 1 :(得分:2)

'$'匹配一行的结尾。因此,此正则表达式将匹配行末尾不是反斜杠的一个或多个字符,即示例字符串中的“_config.bat”。

[^\\]+$

答案 2 :(得分:1)

如果您希望在最后一个反斜杠之后拥有所有内容,则可以使用以下正则表达式:

.*\\(.*)

捕获组将为您提供所需的结果。因为默认情况下第一个。*是贪婪的,它会尽可能多地匹配,因此也会消耗掉除最后一个之外的任何反斜杠(因为那样就不再有匹配了)。

答案 3 :(得分:1)

尝试RegexOptions.RightToLeft;有关详细信息,请访问以下链接:https://msdn.microsoft.com/en-us/library/yd1hzczs%28v=vs.110%29.aspx

答案 4 :(得分:0)

这是查看斜杠(?<=\\)后面的正则表达方式:

string fileName = @"blah\blah\_config.bat";
Regex.Match(fileName, @"(?<=\\)[^\\]+$"));

但如果您正在谈论文件名,请使用

string relativePath = @"blah\blah\_config.bat";
string fileName = Path.GetFileName(relativePath);