Удалить последнее слово в методе split by \

У меня есть строка, в которой я хочу удалить последнее слово split с помощью \

например:

string name ="kak\kdk\dd\ddew\cxz\"

теперь я хочу удалить последнее слово, чтобы получить новое значение для имени

name= "kak\kdk\dd\ddew \"

есть простой способ сделать это

спасибо

Ответ 1

Как вы получаете эту строку в первую очередь? Я предполагаю, что вы знаете, что '\' является символом escape в С#. Однако вы должны далеко продвинуться, используя

name = name.TrimEnd('\\')
name = name.Remove(name.LastIndexOf('\\') + 1);

Ответ 2

string result = string.Join("\\",
            "kak\\kdk\\dd\\ddew\\cxz\\"
            .Split(new[] { '\\' }, StringSplitOptions.RemoveEmptyEntries)
            .Reverse()
            .Skip(1)
            .Reverse()
            .ToArray()) + "\\";

Ответ 3

Здесь не регулярное выражение.

string newstring = name.SubString(0, name.SubString(0, name.length - 1).LastIndexOf('\\'));

Ответ 4

Попробуйте следующее:

const string separator = "\\";
string name = @"kak\kdk\dd\ddew\cxz\";
string[] names = name.Split(separator.ToCharArray(), 
    StringSplitOptions.RemoveEmptyEntries);
string result = String.Join(separator, names, 0, names.Length - 1) + separator;

Ответ 5

EDIT: Я только заметил, что name.Substring(0,x) эквивалентен name.Remove(x), поэтому я изменил свой ответ, чтобы отразить это.

В одной строке:

name = name = name.Remove(name.Remove(name.Length - 1).LastIndexOf('\\') + 1);


Если вы хотите это понять, вот как это может быть написано (чрезмерно) словесно:

string nameWithoutLastSlash = name.Remove(name.Length - 1);
int positionOfNewLastSlash = nameWithoutLastSlash.LastIndexOf('\\') + 1;
string desiredSubstringOfName = name.Remove(positionOfNewLastSlash);
name = desiredSubstringOfName;

Ответ 6

Эта замена регулярного выражения должна делать трюк:

name = Regex.Replace(name, @"\\[a-z]*\\$", "\\");

Ответ 7

string name ="kak\kdk\dd\ddew\cxz\"
string newstr = name.TrimEnd(@"\")

Ответ 8

Мое решение

 public static string RemoveLastWords(this string input, int numberOfLastWordsToBeRemoved, char delimitter)
        {
            string[] words = input.Split(new[] { delimitter });
            words = words.Reverse().ToArray();
            words = words.Skip(numberOfLastWordsToBeRemoved).ToArray();
            words = words.Reverse().ToArray();
            string output = String.Join(delimitter.ToString(), words);
            return output;
        }

Вызов функции

RemoveLastWords("kak\kdk\dd\ddew\cxz\", 1, '\')