2010-07-26 9 views
9

У меня есть строки, как «/ LM/W3SVC/1216172363/корень/175_Jahre_STAEDTLER_Faszination_Schreiben»Как вырезать строку

И мне нужно только «175_Jahre_STAEDTLER_Faszination_Schreiben», где «корень» является сепаратор. Как я могу это сделать?

+0

+1 для названия, это напоминает мне, как правильно синтаксис выделить лев –

+4

... использовать ножницы? – Randolpho

+1

Как долго длится строка? –

ответ

2

Проверьте методы System.IO.Path - не совсем файлы и папки, но с/разделителем это может сработать!

+4

Кажется, что это может быть связано с некоторыми уродливыми побочными эффектами. –

+0

@ Майк - да, возможно, вы правы. Мне нравится .split ответы лучше. – n8wrl

+0

Да, из-за предположений о том, что представляет собой действительный разделитель. Лучше всего избегать. –

20

"/LM/W3SVC/1216172363/root/175_Jahre_STAEDTLER_Faszination_Schreiben".Split("/root/")[1] должен дать вам «175_Jahre_STAEDTLER_Faszination_Schreiben»

+5

Конечно, вы должны, вероятно, назначить его переменной и проверить, что он смог правильно разбить строку, чтобы избежать исключений для плохо сформированных строк. – NickAldwin

0

Используйте String.Split отделить строку с «корнем» в качестве разделителя. Затем используйте второй элемент результирующего массива.

0
string s = "/LM/W3SVC/1216172363/root/175_Jahre_STAEDTLER_Faszination_Schreiben"; 
int li = s.LastIndexOf("root/"); 
s = s.Substring(li + 5, s.Length - 1 - (li + 4)); 
MessageBox.Show(s); 
+1

Он упомянул, что хотел разбить «корень», не обязательно на произвольную косую черту ... но это хорошо для общего расщепления. – NickAldwin

+0

Да, ты прав Ник. Я редактирую свой ответ, спасибо – anilca

4

Другой метод:

String newstring = file_path.Substring(file_path.LastIndexOf('/') + 1); 
1

Если вы хотите, чтобы извлечь часть строки на основе общей структуры, регулярные выражения может быть хорошей альтернативой в некоторых ситуациях.

string s = "/LM/W3SVC/1216172363/root/175_Jahre_STAEDTLER_Faszination_Schreiben"; 
Regex re = new Regex(@"/root/(?<goodPart>\w+)$"); 
Match m = re.Match(s); 
if (m.Success) { 
    return m.Groups["goodPart"].ToString(); 
} 
+0

Regex определенно является хорошим решением для более сложных проблем (и я понятия не имею, насколько сложна проблема OP на самом деле) ... вам просто нужно принять во внимание небольшой успех. Regex имеет свое место, но если простой Split или Substring будет делать трюк, использование регулярных выражений может на самом деле быть вредным. (Я ничего не имею против регулярных выражений, я использую их все время!Просто даю полезные комментарии :) – NickAldwin

+0

@NickAldwin, я согласен, просто представляю альтернативу для полноты. Надеюсь, я отредактировал свой ответ, чтобы сделать это немного яснее. –

+0

Да, я понимаю это, и я думаю, что важно иметь видимые альтернативы (отсюда и мой upvote :). Я просто разъяснял Regex vs Split point. Спасибо за публикацию (и редактирование для ясности)! – NickAldwin

0

Если вам нужно найти относительный путь, основанный на базовом пути (что это звучит как то, что проблема, которую вы пытаетесь решить это, или, по крайней мере, обобщение вашей проблемы), вы можете использовать систему. Класс Ури. Однако у него есть свои ограничения. Самый чистый и самый правильный способ найти относительный путь - использовать DirectoryInfo. С помощью DirectoryInfo вы можете «ходить» по дереву каталогов (назад или вперед) и строить на основе иерархии. Затем просто выполните небольшую манипуляцию, чтобы отфильтровать дубликаты, и то, что у вас осталось, - это ваш относительный путь. Есть некоторые детали, такие как добавление эллипсов в нужное место и т. Д., Но DirectoryInfo - это хорошее место для начала анализа путей на основе текущей платформы ОС.

FYI - Я только что закончил писать компонент здесь, на работе, чтобы сделать именно это, поэтому он довольно свежий в моем сознании.

1
string s = "/LM/W3SVC/1216172363/root/175_Jahre_STAEDTLER_Faszination_Schreiben"; 
string separator = "root"; 
string slash = "/"; 
int idx = s.IndexOf(separator); 
string result = s.SubString(idx + separator.Length + slash.Length); 
Смежные вопросы