Вы можете читать назад в регулярных выражениях? - PullRequest
2 голосов
/ 28 июня 2011
"blahblah\dummytext\_config.bat"

Если бы я хотел извлечь _config.bat из этой строки, что было бы лучшим способом? Единственный способ, о котором я могу думать, - это прочитать из .bat обратно в первый найденный слеш, но я не знаю, как это сделать.

Ответы [ 5 ]

5 голосов
/ 28 июня 2011

Вы можете найти последнюю обратную косую черту с помощью метода 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 также принимают несуществующие пути и имена файлов.

2 голосов
/ 28 июня 2011

'$' соответствует концу строки.Таким образом, это регулярное выражение будет соответствовать одному или нескольким символам, которые не являются обратными слешами в конце строки, то есть '_config.bat' в строке примера.

[^\\]+$
1 голос
/ 13 октября 2015

Попробуйте RegexOptions.RightToLeft;Для получения дополнительной информации перейдите по этой ссылке: https://msdn.microsoft.com/en-us/library/yd1hzczs%28v=vs.110%29.aspx

1 голос
/ 28 июня 2011

Если вы хотите иметь все после последней обратной косой черты, вы можете использовать следующее регулярное выражение:

.*\\(.*)

Группа захвата даст вам желаемый результат. Поскольку по умолчанию первый. * Является жадным, он будет совпадать столько, сколько может, и поэтому потребляет также любые обратные косые черты, кроме последнего (потому что тогда совпадение больше не будет возможным).

0 голосов
/ 29 июня 2011

Вот способ регулярного выражения для слэша (?<=\\):

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

Но если вы говорите о имени файла, просто используйте

string relativePath = @"blah\blah\_config.bat";
string fileName = Path.GetFileName(relativePath);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...