各位高手,本人正完成一个从网上抓数据的程序,因为新老版本数据的网页格式有所不同,正则表达式不能匹配,而且好像还有死循环的问题,哪位高手能帮忙解决一下啊。新数据正则表达式:
<a target='_blank'\s+href='http://vip.stock.finance.sina.com.cn/quotes_service/view/vMS_tradehistory.php\?symbol="+strMarketCode+@"\d{6}&date=\d{4}-\d{2}-\d{2}'>\s*([^\s]+)\s+</a>\s*</div></td>\s*<td[^\d]*([^<]*)</div></td>\s+<td[^\d]*([^<]*)</div></td>\s+<td[^\d]*([^<]*)</div></td>\s+<td[^\d]*([^<]*)</div></td>\s+<td[^\d]*([^<]*)</div></td>\s+<td[^\d]*([^<]*)</div></td>\s+<td[^\d]*([^<]*)</div></td>\s新数据样本:
<!--历史交易begin-->
    <table width="100%" border="0" align="center" cellpadding="0" cellspacing="10" class="table2">
      <tr>
        <td  align="left" valign="top">
<form method="get" name="daily" action="">
<select name="year">
<option value="2011" selected>2011</option>
<option value="2010" >2010</option>
<option value="2009" >2009</option>
<option value="2008" >2008</option>
<option value="2007" >2007</option>
<option value="2006" >2006</option>
<option value="2005" >2005</option>
<option value="2004" >2004</option>
<option value="2003" >2003</option>
<option value="2002" >2002</option>
<option value="2001" >2001</option>
<option value="2000" >2000</option>
<option value="1999" >1999</option>
<option value="1998" >1998</option>
<option value="1997" >1997</option>
</select>
<select name="jidu">
<option value="1" >一季度</option>
<option value="2" >二季度</option>
<option value="3" >三季度</option>
<option value="4" selected>四季度</option>
</select> <input type="submit" value="查询"> 
</form> </td>
      </tr>
    </table>
    <table id="FundHoldSharesTable">
  <thead>
<tr>
<th colspan="8">
宇通客车(600066)<FONT COLOR="blue">2011</FONT>年<FONT COLOR="blue">4</FONT>季度复权历史交易
</th>
</tr>
      </thead>
      <tr class="tr_2">
        <td><div align="center"><strong>日期</strong></div></td>
        <td><div align="center"><strong>开盘价</strong></div></td>
        <td><div align="center"><strong>最高价</strong></div></td>
        <td><div align="center"><strong>收盘价</strong></div></td>
        <td class="tdr"><div align="center"><strong>最低价</strong></div></td>
<td class="tdr"><div align="center"><strong>交易量(股)</strong></div></td>
<td class="tdr"><div align="center"><strong>交易金额(元)</strong></div></td>
<td class="tdr"><div align="center"><strong>复权因子</strong></div></td>
      </tr>
  <tr >
<td><div align="center">

<a target='_blank' href='http://vip.stock.finance.sina.com.cn/quotes_service/view/vMS_tradehistory.php?symbol=sh600066&date=2011-11-22'>
2011-11-22 </a>
</div></td>
<td><div align="center">235.778</div></td>
<td><div align="center">242.439</div></td>
<td><div align="center">239.373</div></td>
<td class="tdr"><div align="center">233.558</div></td>
<td class="tdr"><div align="center">6829412.000</div></td>
<td class="tdr"><div align="center">154660496.000</div></td>
<td class="tdr"><div align="center">10.573</div></td>
  </tr>
  <tr class="tr_2">
<td><div align="center">

<a target='_blank' href='http://vip.stock.finance.sina.com.cn/quotes_service/view/vMS_tradehistory.php?symbol=sh600066&date=2011-11-21'>
2011-11-21 </a>
</div></td>
<td><div align="center">239.479</div></td>
<td><div align="center">253.752</div></td>
<td><div align="center">240.430</div></td>
<td class="tdr"><div align="center">236.624</div></td>
<td class="tdr"><div align="center">15819385.000</div></td>
<td class="tdr"><div align="center">363487232.000</div></td>
<td class="tdr"><div align="center">10.573</div></td>
  </tr>老数据正则表达式:
<td[^\d]*([^<]*)</div></td>\s+<td[^\d]*([^<]*)</div></td>\s+<td[^\d]*([^<]*)</div></td>\s+<td[^\d]*([^<]*)</div></td>\s+<td[^\d]* ([^<]*)</div></td>\s+<td[^\d]*([^<]*)</div></td>\s+<td[^\d]*([^<]*)</div></td>\s+<td[^\d]*([^<]*)</div></td>\s老数据样本:
<!--历史交易begin-->
    <table width="100%" border="0" align="center" cellpadding="0" cellspacing="10" class="table2">
      <tr>
        <td  align="left" valign="top">
<form method="get" name="daily" action="">
<select name="year">
<option value="2011" >2011</option>
<option value="2010" >2010</option>
<option value="2009" >2009</option>
<option value="2008" >2008</option>
<option value="2007" >2007</option>
<option value="2006" >2006</option>
<option value="2005" >2005</option>
<option value="2004" >2004</option>
<option value="2003" >2003</option>
<option value="2002" >2002</option>
<option value="2001" >2001</option>
<option value="2000" selected>2000</option>
<option value="1999" >1999</option>
<option value="1998" >1998</option>
<option value="1997" >1997</option>
</select>
<select name="jidu">
<option value="1" >一季度</option>
<option value="2" >二季度</option>
<option value="3" >三季度</option>
<option value="4" selected>四季度</option>
</select> <input type="submit" value="查询"> 
</form> </td>
      </tr>
    </table>
    <table id="FundHoldSharesTable">
  <thead>
<tr>
<th colspan="8">
宇通客车(600066)<FONT COLOR="blue">2000</FONT>年<FONT COLOR="blue">4</FONT>季度复权历史交易
</th>
</tr>
      </thead>
      <tr class="tr_2">
        <td><div align="center"><strong>日期</strong></div></td>
        <td><div align="center"><strong>开盘价</strong></div></td>
        <td><div align="center"><strong>最高价</strong></div></td>
        <td><div align="center"><strong>收盘价</strong></div></td>
        <td class="tdr"><div align="center"><strong>最低价</strong></div></td>
<td class="tdr"><div align="center"><strong>交易量(股)</strong></div></td>
<td class="tdr"><div align="center"><strong>交易金额(元)</strong></div></td>
<td class="tdr"><div align="center"><strong>复权因子</strong></div></td>
      </tr>
  <tr >
<td><div align="center">
2000-12-29 </div></td>
<td><div align="center">27.273</div></td>
<td><div align="center">27.926</div></td>
<td><div align="center">27.616</div></td>
<td class="tdr"><div align="center">27.109</div></td>
<td class="tdr"><div align="center">3218005.000</div></td>
<td class="tdr"><div align="center">54368298.000</div></td>
<td class="tdr"><div align="center">1.633</div></td>
  </tr>
  <tr class="tr_2">
<td><div align="center">
2000-12-28 </div></td>
<td><div align="center">27.273</div></td>
<td><div align="center">27.599</div></td>
<td><div align="center">27.273</div></td>
<td class="tdr"><div align="center">27.044</div></td>
<td class="tdr"><div align="center">343697.000</div></td>
<td class="tdr"><div align="center">5730195.000</div></td>
<td class="tdr"><div align="center">1.633</div></td>
  </tr>这两个分别运行是都没有问题,但当新老数据在一起是有悲剧了,当机我判断是老正则表达式的问题
新老数据混合样本:
 <tr class="tr_2">
<td><div align="center">

<a target='_blank' href='http://vip.stock.finance.sina.com.cn/quotes_service/view/vMS_tradehistory.php?symbol=sh600066&date=2011-11-01'>
2011-11-01 </a>
</div></td>
<td><div align="center">222.033</div></td>
<td><div align="center">226.580</div></td>
<td><div align="center">224.465</div></td>
<td class="tdr"><div align="center">220.553</div></td>
<td class="tdr"><div align="center">2691439.000</div></td>
<td class="tdr"><div align="center">57055752.000</div></td>
<td class="tdr"><div align="center">10.573</div></td>
  </tr>
  <tr class="tr_2">
<td><div align="center">
2000-10-31 </div></td>
<td><div align="center">25.803</div></td>
<td><div align="center">26.309</div></td>
<td><div align="center">25.640</div></td>
<td class="tdr"><div align="center">25.395</div></td>
<td class="tdr"><div align="center">1338500.000</div></td>
<td class="tdr"><div align="center">21314681.000</div></td>
<td class="tdr"><div align="center">1.633</div></td>
  </tr>
望高手提携啊
能否有针对新老数据的通用表达式

解决方案 »

  1.   

    备注:新正则表达式里的strMarketCode是c#程序里的变量
    这里可以直接换成sh,抓取上海市场的股票数据
      

  2.   

    我是用Mtracer进行测试的
    http://www.regexlab.com/zh/mtracer/download.htm新老数据已经在程序里分别抓取完但合在一起Mtracer都过不去,
      

  3.   

    http://money.finance.sina.com.cn/corp/go.php/vMS_FuQuanMarketHistory/stockid/600066.phtml?year=2006&jidu=2
    这个是网页,新老数据混在一起,有没有通用的表达式可以抓取这个表格里的数据