我在HTTP请求(Authorize)标头中通过的数据类似于以下内容:
name="Dave O'Connel", "e-mail"="[email protected]", epoch=1498158305, "other value"="some arbitrary\" text, with comma = and equals symbol"
我想将其放入KeyValuePair
由于以下原因,解析此数据非常困难
仅当键和值包含非字母数字字符时才使用引号
键和值可以包含逗号,(转义的)双引号和等号
我必须处理哪些选项?香港专业教育学院尝试过CSV库,但最终结果不正确。
最佳答案
我听到很多人说:如果使用正则表达式解决问题,则会遇到两个问题。哦,好吧……如果您不想编写自己的解析器……这个小怪物很好用:
public class Program
{
static void Main(string[] args)
{
Regex regex = new Regex("^(?:(?:[, ]+)?(?\'q\'\")?(?\'key\'[^=\"]*?)(?:\\k\'q\'(?\'-q\'))?=(?\'q\'\")?(?\'value\'(?:[^\"]|(?<=\\\\)\")*)(?:\\k\'q\'(?\'-q\'))?)*(?(q)(?!))$", RegexOptions.Compiled);
string s = "name=\"Dave O\'Connel\", \"e-mail\"=\"[email protected]\", epoch=1498158305, \"other value\"=\"some arbitrary\\\" text, with comma = and equals symbol\"";
Match match = regex.Match(s);
if (match.Success)
{
var keys = match.Groups["key"].Captures;
var values = match.Groups["value"].Captures;
for (int i = 0; i < keys.Count; i++)
{
Console.WriteLine(keys[i] + " = " + values[i]);
// this prints:
// name = Dave O'Connel
// e-mail = [email protected]
// epoch = 1498158305,
// other value = some arbitrary\" text, with comma = and equals symbol
}
}
Console.ReadLine();
}
}
关于c# - 解析以逗号分隔的键值对,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44707690/