Значение из текста

165
06 января 2019, 11:50

Как можно средствами C# получить определенную часть строки?

У меня есть такая строка:

loc += "&sessionKey=16818";

Отсюда нужно получить само значение sessionkey, то есть только 16818. Как это можно сделать?

Answer 1

Собственно, как Вы уже увидели в комментариях, Ваша проблема имеет уйму решений!
Пройдемся по каждому)

LastIndexOf

Так как нужное Вам значение находится после символа '=', почему бы этим не воспользоваться?

Для нахождения последнего в строке индекса, по которому находится символ '=', будем использовать метод string.LastIndexOf(char)

// Строка, откуда будем доставать значение
string parseFrom = "&sessionKey=16818";
// Возьмем подстроку из заданной строки, начиная со следующего после '=' индекса
string value = parseFrom.Substring(parseFrom.LastIndexOf('=') + 1); // 16818

Split

Также мы можем разделить строку на массив подстрок по все тому же символу '=', используя метод string.Split(params char[]), тогда последней подстрокой и будет искомое значение:

// Строка, откуда будем доставать значение
string parseFrom = "&sessionKey=16818";
// Разделим строку по символу '=' и возьмем последнюю подстроку
string value = parseFrom.Split('=').Last(); // 16818

Linq

По аналогии с методом LastIndexOf мы можем проигнорировать все символы строки до индекса, находящегося сразу после последнего в строке символа '=', взяв оставшуюся последовательность:

// Строка, откуда будем доставать значение
string parseFrom = "&sessionKey=16818";
// Пропустим все до следующего за '=' символа
string value = string.Concat(parseFrom.Skip(parseFrom.LastIndexOf('=') + 1)); // 16818

Или так:

// Строка, откуда будем доставать значение
string parseFrom = "&sessionKey=16818";
// Пропустим все до следующего за '=' символа
string value = string.Concat(parseFrom.SkipWhile(x => x != '=').Skip(1)); // 16818

Или же пропустим все символы, что не являются цифрой, взяв из остатка только цифры:

// Строка, откуда будем доставать значение
string parseFrom = "&sessionKey=16818";
// Пропустим все не цифры, взяв из остатка только цифры)
string value = string.Concat(parseFrom.SkipWhile(x => !char.IsDigit(x)).TakeWhile(x => char.IsDigit(x))); // 16818

Regex

И только для того, чтобы пост был полным, предложу Вам решение с помощью регулярных выражений (см. Regex):

// Строка, откуда будем доставать значение
string parseFrom = "&sessionKey=16818";
// Достанем из строки последнее числовое значение
string value = new Regex(".*?(\\d+)").Match(parseFrom).Groups.Cast<Group>().Last().Value; // 16818

HttpUtility.ParseQueryString

Я вижу, что Ваша подстрока ну больно напоминает часть URL. Так что если Ваша полная строка действительно является таковым, то, используя встроенный функционал .NET, мы можем спокойно получить значение параметра URL по его имени
Ведь, как говорится, все уже украдено изобретено до нас)

Воспользуемся методом HttpUtility.ParseQueryString(string):

// Строка, откуда будем доставать значение
string parseFrom = "&sessionKey=16818";
// Полный URL
string loc = "http://127.0.0.1/?someParam=0";
// Прибавим к нему наш параметр, как в Вашем примере
loc += parseFrom;
Uri parseUri = new Uri(loc);
// Выпарсим значение параметра sessionKey
string value = HttpUtility.ParseQueryString(parseUri.Query).Get("sessionKey"); // 16818

Или же еще проще:

Так как Uri.Query содержит в себе все сведения запроса, мы можем только ими и оперировать! Выглядеть это будет так:

// Строка, откуда будем доставать значение
string parseFrom = "&sessionKey=16818";
// Выпарсим значение параметра sessionKey
string value = HttpUtility.ParseQueryString(parseFrom).Get("sessionKey"); // 16818

Надеюсь, предложенные мною методы помогли Вам решить задачу, и Вы сможете дальше двигаться по пути своих свершений)
Удачи!

READ ALSO
запрет клик мышкой по ListBox C# (windows form)

запрет клик мышкой по ListBox C# (windows form)

У меня есть кнопки который переключают Items, но у меня не получается запретить клик мышкой по ListBox, обшарил гугл, не нашёл(Либо я слепой)Помогите...

187
LiqPay обрывает сессию. ASP.NET Core

LiqPay обрывает сессию. ASP.NET Core

Проблема вот в чемЯ делаю успешно оплату по этому сервису у себя на сайте где после оплаты автоматический редирект на метод в котором в таблице...

165
Ограничение доступа к сайту

Ограничение доступа к сайту

Можно ли сделать сайт выложенный на хостинг доступным только с одного, двух ip адресов? Знаю что с помощьюhtaccess можно скрыть из доступа некоторые...

204