2009-02-23 85 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*"([^"]*)" 

否則,您應該抓取列表中的每個條目,然後根據需要選擇它們。