引号之间的正则表达式

时间:2012-07-26 18:59:46

标签: c# regex string

我必须解析作为项目播放列表文件的一部分:

布局如下:

{
         "info" : "",
         "time" : "05:00",
         "url_stream" : "http://loopstream01.apa.at/?channel=oe1&id=20120726_0500_1_2_nachrichten_XXX_w_",
         "day_label" : "26.07.2012",
         "short_title" : "Nachrichten",
         "url_detail" : "",
         "url_json" : "/programm/308178/konsole",
         "parts" : [],
         "tag" : "",
         "id" : "308178",
         "title" : "Nachrichten",
         "url_playlist" : "/programm/308178/playlist"
      },........... and so on

现在我想获得“属性”的值。我试过这个

"info" : "(?<info>(([^"]*)))", ....

但它有问题,因为有可能存在这样的事情:

“info”:“Hello”World“这是一个测试”,

你看到“世界”也在“”,所以它变得越来越多。 有人为我提供了一个良好而干净的解决方案吗?

3 个答案:

答案 0 :(得分:2)

使用Microsoft here记录的JavaScriptSerializer类来反序列化JSON。这比RegEx容易得多。

答案 1 :(得分:0)

我在网上发现了两个类似的网页。可以使用Json.Net解析它们,如下所示:

using (var wc = new WebClient())
{
    string url = "http://derruki.dyndns.org/oe1rip/json-list-source.php";
    string json = wc.DownloadString(url);

    dynamic dynObj = JsonConvert.DeserializeObject(json);
    foreach(var item in dynObj)
    {
        Console.WriteLine("INFO:{0}\nTITLE:{1}\nURL:{2}\n\n",
            item.info, item.short_title, item.url_stream);
    }
}

对于http://oe1.orf.at/programm/konsole/tag/20120726,您应该将循环更改为

foreach(var item in dynObj.list)

答案 2 :(得分:0)

试试这个:

(?<=[\n\r])[^\S\n\r]*"info"[^\S\n\r]*:[^\S\n\r]*"(?<info>.*?)",?[^\S\n\r]*(?=[\n\r])