2014-02-15 56 views
0

我有这样的代码,抓住从网页指定的文本:替代的foreach输出

static void Main(string[] args) 
{ 
    using (var client = new WebClient()) 
    { 
     var pageContent = client.DownloadString("http://www.modern-railways.com"); 
     var regexTitle = new Regex(@"<span class='articleTitle'>(.+?)</span>"); 
     var regexDate = new Regex(@"class='summaryText' data-ajax='false'>(.+?)</a></p><div"); 


     foreach (Match title in regexTitle.Matches(pageContent)) 
     { 
      var articleTitle = title.Groups[1].Value; 
      Console.WriteLine(articleTitle); 
     } 

     foreach (Match date in regexDate.Matches(pageContent)) 
     { 
      var articleDate = date.Groups[1].Value; 
      Console.WriteLine(articleDate); 
     } 

     Console.ReadLine(); 
    } 
} 

因为它是现在它第一次,然后打印所有articleTitle所有articleDate。我怎样才能摆脱第一线的ArticleTitle,第二线的文章日期等?

+1

不要试图用正则表达式来解析HTML。使用专门设计用于解析HTML的工具,如HTML Agility Pack。 –

回答

1

您可以使用LINQ和Zip方法:

var titles = regexTitles.Matches(pageContent).Cast<Match>(); 
var dates = regexDate.Matches(pageContent).Cast<Match>(); 

var source = titles.Zip(dates, (t, d) => new { Title = t, Date = d }) 

foreach (var item in source) 
{ 
    var articleTitle = item.Title.Groups[1].Value; 
    var articleDate = item.Date.Groups[1].Value; 

    Console.WriteLine(articleTitle); 
    Console.WriteLine(articleDate); 
} 
+0

谢谢。我需要解析Zip,因为它给了我错误。 – Nullbyte

+0

添加'使用System.Linq;'使其工作。 – MarcinJuraszek