将value =“pair”字符串解析为Dictionary

时间:2014-10-21 04:21:08

标签: c# .net regex

我需要解析一个字符串来检索此字符串的所有 value =" pair" 。我选择用简单的正则表达式来做到这一点。我的正则表达式是正确的,但我不记得如何简单地将我的结果,我的MatchCollection转换为一个简单的键值字典。

string headerName = context.Headers["Authorization"];
/* Authorization header
OAuth oauth_version="1.0", oauth_signature_method="HMAC-SHA1", oauth_nonce="K7WmP9YrR2oCYC3", oauth_timestamp="1413801976", oauth_consumer_key="test", oauth_signature="8ad2fZh23q%2FWfK6RykqcvhlLxH4%3D" */
string pattern = "(?<Keyword>\\w+)\\s*=\\s*\\\"(?<Value>\\w+)\\\"";
MatchCollection matches = Regex.Matches(headerName, pattern);

Dictionary<string, string> dictionary = new Dictionary<string,string>();

foreach(Match match in matches)
{
    dictionary.Add(match["Keyword"], match["Value"]); // This is wrong
}

2 个答案:

答案 0 :(得分:2)

这是对的:

dictionary.Add(match.Groups["Keyword"].Value, match.Groups["Value"].Value);

您需要先从Groups集合中获取匹配组,然后获取组的值。

答案 1 :(得分:2)

应该工作:

var dic = matches.Cast<Match>()
                 .ToDictionary(m => m.Groups["Keyword"].Value,
                               m => m.Groups["Value"].Value);

P.S。我不会在这里使用RegEx,而是使用简单的字符串处理:

string header = context.Headers["Authorization"];
string[] pairs = header.Split(',');
var dic = pairs.Select(p => p.Trim().Split('='))
               .ToDictionary(p => p[0], p => p[1]);

它更简单。