правила, которые нужно, как представляется, следующее:
- Имя папки = последней строки, предшествовавшего «/» характер, но не содержащий символ «/»
- имя контента = последняя строка, не содержащая '/' до (но не включая) a '_' или '.' характер
- путь_к_папке = так же, как имя папки, за исключением того, что может содержать «/» характер
Предполагая, что правила выше - вы, вероятно, хотите этот код:
string value = @"/webdav/MyPublication/Building%20Blocks/folder0/folder1/content_1.xml";
var foldernameMatch = Regex.Match(value, @"([^/]+)/[^/]+$");
var contentnameMatch = Regex.Match(value, @"([^/_\.]+)[_\.][^/]*$");
var folderpathMatch = Regex.Match(value, @"(.*/)[^/]*$");
if (foldernameMatch.Success && contentnameMatch.Success && folderpathMatch.Success)
{
var foldername = foldernameMatch.Groups[1].Value;
var contentname = contentnameMatch.Groups[1].Value;
var folderpath = folderpathMatch.Groups[1].Value;
}
else
{
// handle bad input
}
Обратите внимание, что вы можете также комбинировать эти чтобы стать один большой регулярное выражение, хотя это может быть более громоздким, чтобы следовать (если это не было уже):
var matches = Regex.Match(value, @"(.*/)([^/]+)/([^/_\.]+)[_\.][^/]*$");
if (matches.Success)
{
var foldername = matches.Groups[2].Value;
var contentname = matches.Groups[3].Value;
var folderpath = matches.Groups[1].Value + foldername + "/";
}
else
{
// handle bad input
}
Не могли бы вы описать правила, которые вы хотите использовать в словах? Пример можно интерпретировать по-разному. Кроме того, что вы пробовали? – svick
Класс «Путь», вероятно, будет полезен. –