Ответ 1
Попробуйте System.Web.HttpUtility.ParseQueryString, передавая все после отметки вопроса. Вам нужно будет использовать сборку System.Web, но для этого не требуется веб-контекст.
У меня есть строка вроде этого:
blablablamorecontentblablabla?name=michel&score=5&age=28&iliedabouttheage=true
выглядит как строка регулярных запросов да, но я не в каком-либо веб-контексте
теперь я хочу извлечь значения (после знака =) по их ключу, например, что такое имя (michel), оценка (5), возраст (28) и т.д.
Обычно я разбираю строку, как бы получить позицию в строке слова "имя", затем добавьте 5 к ней (длина "name=" ) и назовите эту позицию "start", затем найдите & - подпишите и назовите эту позицию "конец", а затем получите строку между началом и концом позиции.
Но должно быть лучшее решение, является ли это регулярным выражением?
Попробуйте System.Web.HttpUtility.ParseQueryString, передавая все после отметки вопроса. Вам нужно будет использовать сборку System.Web, но для этого не требуется веб-контекст.
Если вы хотите создать словарь пары ключ/значение, вы можете использовать бит LINQ:
Dictionary<string, string> yourDictionary =
yourString.Split('?')[1]
.Split('&')
.Select(x => x.Split('='))
.ToDictionary(y => y[0], y => y[1]);
(Вы можете пропустить часть Split('?')[1]
, если ваша строка содержит только строку запроса, а не весь URL-адрес.)
Не совсем, это можно сделать только с помощью функции Split (что следует за псевдокодом, вам нужно добавить связанные проверки)
string[] query = value.Split('?');
foreach (string pairs in query[1].Split('&')
{
string[] values = pairs.split('=');
}
Затем перебираем переменную значений и получаем нужные вам вещи.
Вы можете использовать метод split
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
Я бы, вероятно, пошел по маршруту Сплит.
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]);
}
Как вы предположили, я бы рекомендовал регулярное выражение, возможно, такой шаблон, как
(?:.)*\?(.*\&.*)*
Я знаю, что есть что-то еще, что может использоваться, чтобы заставить регулярное выражение игнорировать первую часть [добавлено, я думаю], но я не могу думать об этом. Это даст вам kvp, тогда вам придется разделить результат на "&". (String.split( '&'))
Вы можете сделать разбивку на '&' а затем один на '='. Вам придется иметь дело с '?' в начале. Или, если строка всегда будет выглядеть так, как querystring, тогда вы все равно можете рассматривать ее как таковую и попробовать что-то вроде этого класса класс QueryString, полезный для манипуляции с querystring, добавлением, и т.д.