Ответ 1
Как вы получаете эту строку в первую очередь? Я предполагаю, что вы знаете, что '\' является символом escape в С#. Однако вы должны далеко продвинуться, используя
name = name.TrimEnd('\\')
name = name.Remove(name.LastIndexOf('\\') + 1);
У меня есть строка, в которой я хочу удалить последнее слово split с помощью \
например:
string name ="kak\kdk\dd\ddew\cxz\"
теперь я хочу удалить последнее слово, чтобы получить новое значение для имени
name= "kak\kdk\dd\ddew \"
есть простой способ сделать это
спасибо
Как вы получаете эту строку в первую очередь? Я предполагаю, что вы знаете, что '\' является символом escape в С#. Однако вы должны далеко продвинуться, используя
name = name.TrimEnd('\\')
name = name.Remove(name.LastIndexOf('\\') + 1);
string result = string.Join("\\",
"kak\\kdk\\dd\\ddew\\cxz\\"
.Split(new[] { '\\' }, StringSplitOptions.RemoveEmptyEntries)
.Reverse()
.Skip(1)
.Reverse()
.ToArray()) + "\\";
Здесь не регулярное выражение.
string newstring = name.SubString(0, name.SubString(0, name.length - 1).LastIndexOf('\\'));
Попробуйте следующее:
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;
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;
Эта замена регулярного выражения должна делать трюк:
name = Regex.Replace(name, @"\\[a-z]*\\$", "\\");
string name ="kak\kdk\dd\ddew\cxz\"
string newstr = name.TrimEnd(@"\")
Мое решение
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, '\')