<tr>
                            <td align="left"> 
                              <table width="700" border="0" align="center" cellpadding="0" cellspacing="0" class="unnamed1">
                                <tr align="left"> 
                                  <td >
                                  <font color='red'>Aegwynn US-Horde
                                  </td>
                                  <td width="134" align="right">
                                  <font color='red'>0.54 </font>
                                 <font color='red'>元</font>/
                                <font color='red'>Gold</font>
                                  
                                  </td>
                                  <td width="132" align="right"><font color="535353">
                                  <font color='red'>30-2000</font></font></td>
                                  <td width="80" align="center"><font color="535353"> 
                                  <font color='red'>紧急</font>
                                  </font></td>
                                  <td width="58" height="25" align="center">
                                  <a href='UserOrderTwo.aspx?id=013,002,001' onclick='return checkUserName()' ><img src='pic/nv_hidden.gif' width='14' height='14' border='0'></a></td>
                                </tr>
                         </table>
                        </td></tr>
                        <tr><td>
                            <img src="pic/line1.jpg" width="100%" height="1" alt="" /></td>
                        </tr>
                    
                        <tr>
                            <td align="left"> 
                              <table width="700" border="0" align="center" cellpadding="0" cellspacing="0" class="unnamed1">
                                <tr align="left"> 
                                  <td >
                                  Aerie'peak US-Alliance
                                  </td>
                                  <td width="134" align="right">
                                  0.50
                                 元/
                                Gold
                                  
                                  </td>
                                  <td width="132" align="right"><font color="535353">
                                  30-482</font></td>
                                  <td width="80" align="center"><font color="535353"> 
                                  正常
                                  </font></td>
                                  <td width="58" height="25" align="center">里面有两中状态,一为"正常",一为"紧急".我想把这两种情况一起抓取.
这是我的表达式但还是只能抓取"正常"情况.
string p = @"<td >(<font[^>]*?>)?(?<area>[^-]*?)-(?<type>[^<]*?)</td>\s+<td[^>]*?>\s+(<font[^>]*?>)?(?<price>\S+)(</font>)?\s+(<font[^>]*?>)?\S+\s+(</font>/)?\s+(<font[^>]*?>)?\S+(</font>)?\s+</td>\s+<td[^>]*?><font[^>]*?>\s+(<font[^>]*?>)?(?<num>[^<]*?)(</font>)?</font></td>\s+<td[^>]*?><font[^>]*?>\s+(<font[^>]*?>)?(?<state>\S+)(\s+</font>)?\s+</font></td>";

解决方案 »

  1.   

    string p =@"<td >(<font[^>]*?>){0,1}(?<area>[^-]*?)-(?<type>[^<]*?)</td>\s+<td[^>]*?>\s+(<font[^>]*?>){0,1}(?<price>\S+)(</font>){0,1}\s+(<font[^>]*?>){0,1}\S+\s+(</font>/){0,1}\s+(<font[^>]*?>){0,1}\S+(</font>){0,1}\s+</td>\s+<td[^>]*?><font[^>]*?>\s+(<font[^>]*?>){0,1}(?<num>[^<]*?)(</font>){0,1}</font></td>\s+<td[^>]*?><font[^>]*?>\s+(<font[^>]*?>){0,1}(?<state>\S+)(\s+</font>){0,1}\s+</font></td>";
    改成这样的还是同样的结果...帮帮忙啊.....
      

  2.   

    <font color='red'>  和</font>不是一直都有的
    就这个问题.谢谢
      

  3.   

    问题主要是由于下面两处不一致
                                      <td width="134" align="right">
                                      <font color='red'>0.54 </font>
                                     <font color='red'>元</font>/
                                    <font color='red'>Gold</font>
                                      
                                      </td>                                  <td width="134" align="right">
                                      0.50
                                     元/
                                    Gold
                                      
                                      </td>这种情况如果“紧急”和“正常”的格式分别保持一致,可以分开来抓取,正则写起来比较清晰,效率也会高些,现在这样写在一起很麻烦,而且效率也不会高,如果一定要保证抓取顺序,那就先<td>[\s\S]*?</td>把price这一部分全取出来,在foreach里做二次处理
      

  4.   

    lxcnn(过客) 兄一语惊醒梦中人啊
    对,两种情况分别抓取..
    谢谢了.
    我先试试,因为这个没必要保证顺序
      

  5.   

    lxcnn(过客) 兄  ,解释下下面两语句是 匹配0或者1次的吧..
    怎么没得到结果啊??
    (<font[^>]*?>)?
    (<font[^>]*?>){0,1}
      

  6.   

    @"<td >(?<area>[^-]*?)-(?<type>[^<]*?)</td>\s+<td[^>]*?>\s+(?<price>\S+)[^<]*?</td>\s+<td[^>]*?><font[^>]*?>(?<num>[^<]*?)</font></td>\s+<td[^>]*?><font[^>]*?>(?<state>[^<]*?)</font></td>"     @”<td >(<font[^>]*?>)?(?<area>[^-]*?)-(?<type>[^<]*?)</td>\s+<td[^>]*?>\s+(<font[^>]*?>)?(?<price>\S+)(</font>)?\s+(<font[^>]*?>)?\S+\s+(</font>/)?\s+(<font[^>]*?>)?\S+(</font>)?\s+</td>\s+<td[^>]*?><font[^>]*?>\s+(<font[^>]*?>)?(?<num>[^<]*?)(</font>)?</font></td>\s+<td[^>]*?><font[^>]*?>\s+(<font[^>]*?>)?(?<state>\S+)(\s+</font>)?\s+</font></td>”这两个语句得到的匹配结果都一样.366个结果
      

  7.   

    对,是其他人的网页.
    最新修改:
    <td >\s+<font[^>]*?>(?<area>[^-]*?)-(?<type>[^<]*?)</td>\s+<td[^>]*?>\s+<font[^>]*?>(?<price>\S+)\s+</font>\s+<font[^>]*?>\S+\s+</font>/\s+<font[^>]*?>\S+</font>\s+</td>\s+<td[^>]*?><font[^>]*?>\s+<font[^>]*?>(?<num>[^<]*?)</font></font></td>\s+<td[^>]*?><font[^>]*?>\s+<font[^>]*?>(?<state>\S+)\s+</font>\s+</font></td>还是不行
      

  8.   

    string p =@"<td >\s+<font[^>]*?>(?<area>[^-]*?)-(?<type>[^<]*?)</td>\s+<td[^>]*?>\s+<font[^>]*?>(?<price>[^<]*?)</font>\s+<font[^>]*?>[^<]*?</font>/\s+<font[^>]*?>[^<]*?</font>\s+</td>\s+<td[^>]*?><font[^>]*?>\s+<font[^>]*?>(?<num>[^<]*?)</font></font></td>\s+<td[^>]*?><font[^>]*?>\s+<font[^>]*?>(?<state>[^<]*?)</font>";提取出"紧急"情况82条..
    我的表达式是要存在数据库的,怎样存这两个?
    用,隔开,用SPLIT,然后FOREACH ??
      

  9.   

    整合结果:
    <td >\s+(<font[^>]*?>)?(?<area>[^-]*?)-(?<type>[^<]*?)</td>\s+<td[^>]*?>\s+(<font[^>]*?>)?(?<price>[^<]*?)(</font>)?\s+(<font[^>]*?>)?[^<]*?(</font>/\s+)?(<font[^>]*?>[^<]*?</font>\s+)?</td>\s+<td[^>]*?><font[^>]*?>\s+(<font[^>]*?>)?(?<num>[^<]*?)(</font>)?</font></td>\s+<td[^>]*?><font[^>]*?>\s+(<font[^>]*?>)?(?<state>[^<]*?)(</font>)?\s+</font>产生结果448 = 前面的366+82
      

  10.   

    大家讨论讨论:
    @"<td >(?<area>[^-]*?)-(?<type>[^<]*?)</td>\s+<td[^>]*?>\s+(?<price>\S+)[^<]*?</td>\s+<td[^>]*?><font[^>]*?>(?<num>[^<]*?)</font></td>\s+<td[^>]*?><font[^>]*?>(?<state>[^<]*?)</font></td>"   结果:366条  时间:29.36秒@"<td >\s+<font[^>]*?>(?<area>[^-]*?)-(?<type>[^<]*?)</td>\s+<td[^>]*?>\s+<font[^>]*?>(?<price>[^<]*?)</font>\s+<font[^>]*?>[^<]*?</font>/\s+<font[^>]*?>[^<]*?</font>\s+</td>\s+<td[^>]*?><font[^>]*?>\s+<font[^>]*?>(?<num>[^<]*?)</font></font></td>\s+<td[^>]*?><font[^>]*?>\s+<font[^>]*?>(?<state>[^<]*?)</font>";
    结果:82条  时间:29.31秒
    <td >\s+(<font[^>]*?>)?(?<area>[^-]*?)-(?<type>[^<]*?)</td>\s+<td[^>]*?>\s+(<font[^>]*?>)?(?<price>[^<]*?)(</font>)?\s+(<font[^>]*?>)?[^<]*?(</font>/\s+)?(<font[^>]*?>[^<]*?</font>\s+)?</td>\s+<td[^>]*?><font[^>]*?>\s+(<font[^>]*?>)?(?<num>[^<]*?)(</font>)?</font></td>\s+<td[^>]*?><font[^>]*?>\s+(<font[^>]*?>)?(?<state>[^<]*?)(</font>)?\s+</font>   结果:448条  时间:29.65秒.过客兄进来看看,好象经过RegexOptions.Compiled 过后的效率都差不多...
    想听听各位高见...
      

  11.   

    <span[^>]*?>(<font[^>]*?>)?[^>]*?(</font>)?</span>\s+</td><td[^>]*?>\s+<span[^>]*?>(<font[^>]*?>)?(?<area>[^<]*?)(</font>)?</span>\s+</td><td[^>]*?>\s+<span[^>]*?>(<font[^>]*?>)?(?<type>[^<]*?)(</font>)?</span>\s+</td><td[^>]*?>\s+<span[^>]*?>(<font[^>]*?>)?(?<price>0\.\d{1,2})[^<]*?(</font>)?</span>\s+</td><td[^>]*?>\s+<span[^>]*?>(<font[^>]*?>)?(?<num>[^<]*?)(</font>)?</span>\s+</td><td[^>]*?>\s+<span[^>]*?>(<font[^>]*?>)?(?<state>[^<]*?)(</font>)?</span> 比如现在这样的表达式执行速度也还是比较快的
      

  12.   

    不好意思,下午有事出去了,一直没在,关于效率的问题,因为我学正则以来,一般处理的都有是小数据量的,很少涉及效率问题,所以没有深入研究,可以参考一下这篇文章http://www.regexlab.com/zh/regtopic.htm