我在HTTP请求(Authorize)标头中通过的数据类似于以下内容:

name="Dave O'Connel", "e-mail"="dave@mailinator.com", 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\"=\"dave@mailinator.com\", 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 = dave@mailinator.com
                    // epoch = 1498158305,
                    // other value = some arbitrary\" text, with comma = and equals symbol
                }
            }

            Console.ReadLine();
        }
    }

关于c# - 解析以逗号分隔的键值对,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44707690/

10-17 01:00