c# извлекают значения из пар "ключ-значение" в строке

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

blablablamorecontentblablabla?name=michel&score=5&age=28&iliedabouttheage=true

похож на регулярную строку запроса да, но я не нахожусь ни в каком веб-контексте

теперь я хочу извлечь значения (после того, как = знак) их ключом, например, каково имя (michel), счет (5), возраст (28) и т.д.

Обычно я анализирую строку, любят, получают положение в строке слова 'имя', затем добавляют 5 к нему (длина 'имени =') и называют это положение, 'запускают' затем поиск &-sign и называют то положение 'концом' и затем добираются, строка между положением запускаются и заканчиваются.

Но должно быть лучшее решение, действительно ли это - regex вещь?

12
задан abatishchev 27 June 2011 в 09:52
поделиться

7 ответов

Попробуйте System.Web.HttpUtility.ParseQueryString, проходя во всем после вопросительного знака. Вам потребуется использовать System.Web сборку, но она не должна требовать веб-контекста.

32
ответ дан 2 December 2019 в 03:02
поделиться

Не совсем, это можно сделать только с помощью функции Split (далее следует псевдокод, нужно добавить связанные проверки)

string[] query = value.Split('?');
foreach (string pairs in query[1].Split('&')
{
  string[] values = pairs.split('=');
}

Затем выполнить итерацию над переменной значений и получить то, что вам нужно.

3
ответ дан 2 December 2019 в 03:02
поделиться

Можно использовать метод сплит

private static void DoIt()
{
    string x = "blablablamorecontentblablabla?name=michel&score=5&age=28&iliedabouttheage=true";

    string[] arr = x.Split("?".ToCharArray());
    if (arr.Length >= 2)
    {
        string[] arr2 = arr[1].Split("&".ToCharArray());
        foreach (string item in arr2)
        {
            string[] arr3 = item.Split("=".ToCharArray());
            Console.WriteLine("key = " + arr3[0] + " value = " + arr3[1]);
        }
    }
}

Выход:

key = name value = michel
key = score value = 5
key = age value = 28
key = iliedabouttheage value = true
2
ответ дан 2 December 2019 в 03:02
поделиться

Я, вероятно, пошел по расщеплению маршрута.

string input = "name=michel&score=5&age=28&iliedabouttheage=true";
string[] pairs = input.Split('&');
Dictionary<string,string> results = new Dictionary<string,string>();
foreach (string pair in pairs) 
{
  string[] paramvalue = pair.Split('=');
  results.Add(paramvalue[0],paramvalue[1]);
}
2
ответ дан 2 December 2019 в 03:02
поделиться

Как вы предложили, я бы порекомендовал Regex, вероятно, узор, как

(?:.)*\?(.*\&.*)*

, я знаю, что есть что-то еще, что можно использовать, чтобы заставить регулярное выражение игнорировать первую часть [добавлена, я думаю], но я не могу думать из этого. Это получит вам KVP, тогда вам придется разделить результат на «&» (string.split ('&'))

1
ответ дан 2 December 2019 в 03:02
поделиться

Можно сделать сплит на '&', а затем один на '='. Вначале вы бы разобрались с '?'. Или если строка всегда будет "выглядеть" как квестринг, то вы все равно можете относиться к ней как к таковой и попробовать что-то вроде этого класса Класс QueryString, полезный для манипуляций с квестрингами, придатками и т.д.

0
ответ дан 2 December 2019 в 03:02
поделиться

Если вы хотите создать словарь пар ключ/значение, то вы можете использовать немного LINQ:

Dictionary<string, string> yourDictionary =
    yourString.Split('?')[1]
              .Split('&')
              .Select(x => x.Split('='))
              .ToDictionary(y => y[0], y => y[1]);

(Вы можете пропустить часть Split('?')[1], если ваша строка содержала только квестринг, а не весь URL)

.
15
ответ дан 2 December 2019 в 03:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: