解析一个值=“0”;对“;字符串输入字典

本文关键字:字符串 字典 输入 一个 | 更新日期: 2023-09-27 18:27:11

我需要解析一个字符串来检索该字符串的所有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”;对“;字符串输入字典

应该工作:

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

附言:我不会在这里使用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]);

它更简单。

这是正确的:

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

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