2009-02-23 88 views
1

在作为网页源代码的文本墙中;我需要获取video_id,l和t,而不需要引用这样的部分。C#解析网页的源代码

“VIDEO_ID”: “lUoiKMxSUCw”, “L”:105, “SK”: “-2fL6AANk__E49CRzF6_Q8F7yBPWdb9QR”, “fmt_map”:“640000分之35/ 9/0/115,34/0/9/0/115,5/0/7/0/0" , “T”: “vjVQa1PpcFMbYtdhqxUip5Vtm856lwh7lXZ6lH6nZAg =”,

我需要以下

lUoiKMxSUCw

vjVQa1PpcFMbYtdhqxUip5Vtm856lwh7lXZ6lH6nZAg =

我被告知使用“正则表达式”,但我不确定如何使用它们。任何帮助将是不错:)

回答

1

正则表达式使用可能是:

\"video_id\":\s*\"(?<videoID>.*?)\"(?:.*?)\"l\":\s*(?<l>.*?),(?:.*?)\"t\":\s*\"(?<t>.*?)\" 

下面是一些示例代码,让你和运行:

string sample = "\"video_id\": \"lUoiKMxSUCw\", \"l\": 105, \"sk\": \"-2fL6AANk__E49CRzF6_Q8F7yBPWdb9QR\", \"fmt_map\": \"35/640000/9/0/115,34/0/9/0/115,5/0/7/0/0\", \"t\": \"vjVQa1PpcFMbYtdhqxUip5Vtm856lwh7lXZ6lH6nZAg=\","; 
string regPattern = "\\\"video_id\\\":\\s*\\\"(?<videoID>.*?)\\\"(?:.*?)\\\"l\\\":\\s*(?<l>.*?),(?:.*?)\\\"t\\\":\\s*\\\"(?<t>.*?)\\\""; 
Regex reg = new Regex(regPattern, RegexOptions.Singleline); 
if (reg.IsMatch(sample)) 
{ 
    Match m = reg.Match(sample); 
    GroupCollection gColl = m.Groups; 
    Console.WriteLine("VideoID:{0}", gColl["videoID"].Value); 
    Console.WriteLine("l:{0}", gColl["l"].Value); 
    Console.WriteLine("t:{0}", gColl["t"].Value); 
} 

不要忘记导入“System.Text.RegularExpressions”。 ;-)

+0

小心打破提供的代码,所以我可以理解是什么让它工作更多。 – Fatal510 2009-02-23 20:29:43

0

如果订单始终是相同的,你可以使用正则表达式:

"video_id"\s*:\s*"([^"]*)"\s*,\s*"l"\s*:\s*(\d+)\s*(?:,\s*"[^"]*"\s*:\s*"[^"]*"\s*)*,\s*"t"\s*:\s*"([^"]*)" 

否则,您应该抓取列表中的每个条目,然后根据需要选择它们。