c#从字符串中的键值对中提取值

我有一个像这样的字符串:

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

看起来像常规查询字符串是,但我不在任何Web上下文中

现在我想通过他们的键提取值(在=符号之后),例如,名称(michel),分数(5),年龄(28)等。

通常我解析字符串就像获取单词’name’的字符串中的位置,然后将5添加到它(长度’name =’)并将此位置命名为’start’然后搜索&-sign并命名该位置’结束’,然后获取位置开始和结束之间的字符串。

但是必须有一个更好的解决方案,这是一个正则表达式吗?

尝试System.Web.HttpUtility.ParseQueryString ,传入问号后的所有内容。 您需要使用System.Web程序集,但它不需要Web上下文。

如果你想创建一个键/值对的字典,那么你可以使用一点LINQ:

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

(如果您的字符串只包含查询字符串而不是整个URL,则可以跳过Split('?')[1]部分。)

不是真的,这可以通过Split函数完成(接下来是有点伪代码,你需要添加绑定检查)

 string[] query = value.Split('?'); foreach (string pairs in query[1].Split('&') { string[] values = pairs.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 results = new Dictionary(); foreach (string pair in pairs) { string[] paramvalue = pair.Split('='); results.Add(paramvalue[0],paramvalue[1]); } 

正如你的建议,我会推荐正则表达式,可能是一个类似的模式

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

我知道还有其他东西可以用来使正则表达式忽略第一部分[我想补充],但我想不出来。 那会得到一个kvp,然后你必须将结果拆分为“&”(String.Split(’&’))

您可以对’&’进行拆分,然后对’=’进行拆分。 你必须处理’?’ 在开始。 或者如果字符串总是“看起来”像一个查询字符串,那么你仍然可以像这样对待它并尝试像这样的类QueryString类对查询字符串操作,附属物等有用