我需要解析一个字符串来检索此字符串的所有 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
}
答案 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]);
它更简单。