2012-12-18 118 views
1

我想匹配表正则表达式,但我有一些问题。我无法弄清楚为什么它不能正确匹配。下面是HTML:匹配表w /正则表达式

<table class="integrationteamstats"> 
    <tbody> 
    <tr> 
     <td class="right"> 
      <span class="mediumtextBlack">Queue:</span> 
     </td> 
     <td class="left"> 
      <span class="mediumtextBlack">0</span> 
     </td> 
     <td class="right"> 
      <span class="mediumtextBlack">Aban:</span> 
     </td> 
     <td class="left"> 
      <span class="mediumtextBlack">0%</span> 
     </td> 
     <td class="right"> 
      <span class="mediumtextBlack">Staffed:</span> 
     </td> 
     <td class="left"> 
      <span class="mediumtextBlack">0</span> 
     </td> 
    </tr> 
    <tr> 
     <td class="right"> 
      <span class="mediumtextBlack">Wait:</span> 
     </td> 
     <td class="left"> 
      <span class="mediumtextBlack">0:00</span> 
     </td> 
     <td class="right"> 
      <span class="mediumtextBlack">Total:</span> 
     </td> 
     <td class="left"> 
      <span class="mediumtextBlack">0</span> 
     </td> 
     <td class="right"> 
      <span class="mediumtextBlack">On ACD:</span> 
     </td> 
     <td class="left"> 
      <span class="mediumtextBlack">0</span> 
     </td> 
    </tr> 
    </tbody> 
    </table> 

我需要2条信息: 下面队列的TD内的数据及以下的等待TD(所以队列计数和等待时间)内的数据。显然这些数字会经常更新。

这是正则表达式我对拉动初始表,但它不是工作:

Match statstable = Regex.Match(this.html, "<table class=\"integrationteamstats\">(.*?)</table>"); 

而且我不知道我的正则表达式应该用从TD的获取数据。

有人问之前,没有也没办法,我可以更新HTML有一个ID或者自然的事情。它几乎是如此。唯一一致的是td的位置。

回答

5

代替正则表达式的,我建议使用HTML Agility Pack解析HTML和查询它的结构。

什么是Html Agility Pack(HAP)?

这是一个敏捷的HTML解析器,它构建了一个读/写DOM并支持普通的XPATH或XSLT(实际上,您不需要理解XPATH或XSLT就可以使用它,不用担心)。它是一个.NET代码库,允许您解析“离开网页”的HTML文件。解析器对“真实世界”格式错误的HTML非常宽容。对象模型与提出System.Xml非常相似,但是对于HTML文档(或流)。

一般来说,regex is a poor choice for parsing HTML

+0

+1的链接到最终的答案 – BlackICE

+0

@Downvoter - 保健评论? – Oded

+0

HTML敏捷包绝对看起来是一个强大和伟大的系统...除了公然缺乏文档....学习使用它非常困难。 – Sugitime