你的数据应该是这样的
<tr><td>data</td><td>data1</td></tr>
<tr><td>data</td><td>data1</td></tr>
你可以先把所有的<tr>替换为空,那就成了
<td>data</td><td>data1</td></tr>
<td>data</td><td>data1</td></tr>
然后按着</tr>把得到的字符串劈开,得到两个字符串
对每个字符串按着相同的办法,先把<td>置换为空,然后
按着</td>劈开这样不就的到所有的数据了吗

解决方案 »

  1.   

    不错的办法,可是html中还有其他的标记,怎么,都替换掉?还有你说得办法能否详细些(从代码上).
      

  2.   

    http://community.csdn.net/Expert/topic/3506/3506609.xml?temp=.6759455
    我在另一个帖子写的Demo,去看一下吧。
      

  3.   

    eddygtimegod(dark)
       先谢谢你,我试一下。为什么女的问的问题这么多人回答,我的几乎没人管。看来还是男人多!
      

  4.   


    没有看见你的帖子而已。类似的问题我也处理过,不建议用正则表达式,
    用httpunit来解析,或者用专门的htmlpraser比较好。如果html标签实在很标准的匹配,达到wellformated的话,当作xml来解析也是可以的。http有WebTable的。这个是我以前写的解析csdn论坛我参与问题的网页表格的  public static com.pigo.xmlbind.Topic[] getmyfourm() {
        WebConversation crtwebclient = new WebConversation();  
        WebRequest req = new GetMethodWebRequest(
            "http://community.csdn.net/Expert/member/MyForum.asp");
        req.setParameter("typenum", "2");
        try {
          WebResponse resp = crtwebclient.getResponse(req);
          WebTable[] tables = resp.getTables();
          com.pigo.xmlbind.Topic topic[] = new com.pigo.xmlbind.Topic[0];
          if (tables.length > 1) {
            WebTable aa = tables[1];
            String tts[] = aa.getTableCell(0, 1).asText().split("\n");
            if (tts.length > 7) {
              topic = new com.pigo.xmlbind.Topic[tts.length - 6];
              // for (int i = 5; i < tts.length - 1; i++) {
              for (int i = 0; i < topic.length; i++) {
                //// myoutput(tts[i] + "aa");
                topic[i] = new com.pigo.xmlbind.Topic();
                String temps = tts[i + 5];
                int lindex = temps.lastIndexOf("|");
                String strguanli = temps.substring(lindex);
                // myoutput(strguanli);
                temps = temps.substring(0, lindex - 1);
                lindex = temps.lastIndexOf("|");
                String strtime = temps.substring(lindex + 2);
                // myoutput(strtime);
                topic[i].setReplyDateTime(strtime);
                temps = temps.substring(0, lindex - 1);
                lindex = temps.lastIndexOf("|");
                String strreplynum = temps.substring(lindex + 2);
                // myoutput(strreplynum);
                topic[i].setReplyNum(Integer.parseInt(strreplynum));
                temps = temps.substring(0, lindex - 1);
                lindex = temps.lastIndexOf("|");
                String strpoint = temps.substring(lindex + 2);
                // myoutput(strpoint);
                topic[i].setPoint(Integer.parseInt(strpoint));
                lindex = temps.lastIndexOf(")");
                temps = temps.substring(0, lindex);
                lindex = temps.lastIndexOf("(");
                String struser = temps.substring(lindex + 1);
                // myoutput(struser);
                topic[i].setPostUserName(struser);
                temps = temps.substring(0, lindex - 1);
                String strtitle = temps.substring(temps.lastIndexOf("|") + 3);
                // myoutput(strtitle);
                topic[i].setTopicName(strtitle);
                /* String topicinfo[]=temps.split("&");
                 for (int jj = 0; jj < topicinfo.length; jj++) {
                   // myoutput(topicinfo);
                 }*/
              }
            }        //// myoutput();
            WebLink[] bb = aa.getTableCell(0, 1).getLinks();
            for (int i = 0, tccc = 0; i < bb.length && tccc < topic.length;
                 i = i + 2, tccc++) {
              String url = bb[i].getURLString();
              String topicid = url.substring(url.lastIndexOf("=") + 1);
              // myoutput(topicid);
              topic[tccc].setTopicId(Long.parseLong(topicid));
            }
          }
          /*
                 for (int i = 0; i < tables.length; i++) {
            // myoutput("第"+i+"个表格:"+tables[i].toString());
            tables[i].getTableCell(1,2).asText();
                 }*/
          //// myoutput(resp.getText());
          return topic;
        }
        catch (Exception ex) {
          ex.printStackTrace();
          return new com.pigo.xmlbind.Topic[0];    }  }
      

  5.   

    最爽的解决方法是,写成xhtml,然后当作xml解析。
      

  6.   

    终于有人搭理我了  感动!!!!
    因为是处理别人的页面,所以不能写成xhtml.
    转换前的html附上
      

  7.   

    <html><head>
    <META HTTP-EQUIV="Pragma" CONTENT="No-cache"> 
    <META HTTP-EQUIV="Expires" CONTENT="0"> 
    <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache"> 
    <LINK href="/selfservice/jsfile/pageCss.css" rel="STYLESHEET" type="text/css">
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>对账单</title>
    </head>
    <body bgcolor="#FFFFFF" topmargin="0" leftmargin="0">
    <div align="left"><table border="0" cellspacing="0" width="860">
      <tr>
        <td width="780" bgcolor="#EEEEEE" align="center"><b><font color="#800000" size="+1">对账单</font></b></td>
      </tr>  <tr>
        <td width="780"><b><font color="#804040">会计科目:102000100110001  银行存款/工商银行/基东结算站/我的公司</font></b></td>
      </tr>
    </table>
    </div><table BORDER="0" WIDTH="860" bgcolor="#01A905" cellspacing="1" cellpadding="2">  <tr>
        <th WIDTH="60" VALIGN="middle" COLSPAN="2" bgcolor="#DDDDDD" ALIGN="CENTER"><font FACE="宋体" color="#000000">2004年</font></th>
        <th WIDTH="60"  VALIGN="middle" ROWSPAN="2"  bgcolor="#DDDDDD" ALIGN="CENTER"><font FACE="宋体" color="#000000">凭证号</font></th>
        <th WIDTH="80"  VALIGN="middle" ROWSPAN="2"  bgcolor="#DDDDDD" ALIGN="CENTER"><font FACE="宋体" color="#000000">原始编号</font></th>   
        <th WIDTH="300" VALIGN="middle" ROWSPAN="2"  bgcolor="#DDDDDD" ALIGN="CENTER"><font FACE="宋体" color="#000000">摘要</font></th>
        <th WIDTH='110'  VALIGN="middle" ROWSPAN='2'   bgcolor="#DDDDDD" ALIGN="CENTER"><font FACE="宋体" color="#000000">借方</font></th>
        <th WIDTH='110'  VALIGN="middle" ROWSPAN='2'   bgcolor="#DDDDDD" ALIGN="CENTER"><font FACE="宋体" color="#000000">贷方</font></th>
        <th WIDTH="30"  VALIGN="middle" ROWSPAN="2"  bgcolor="#DDDDDD" ALIGN="CENTER"><font FACE="宋体" color="#000000">方向</font></th>
        <th WIDTH='110'  VALIGN="middle" ROWSPAN='2'   bgcolor="#DDDDDD" ALIGN="CENTER"><font FACE="宋体" color="#000000">余额</font></th>
      </tr>
      <tr> 
        <th WIDTH="30" VALIGN="middle" bgcolor="#DDDDDD" ALIGN="CENTER"><font FACE="宋体" color="#000000">月</font></th>
        <th WIDTH="30" VALIGN="middle" bgcolor="#DDDDDD" ALIGN="CENTER"><font FACE="宋体" color="#000000">日</font></th>
      </tr>
       
      <tr bgcolor="#F0F0F0"> 
        <td WIDTH="30">10</td>
        <td WIDTH="30">13</td>
        <td WIDTH="60"><a href="/selfservice/servlet/cnpc.servlet.JournalServlet?func=0&dwbh=0001&year=2004&month=10&pzbh=11X0188">11X0188</a></td>
        <td WIDTH="80"> </td>
        <td WIDTH="300">我的公司退东营奥拓石油新技术有限责任公司款</td>
        <td WIDTH="110" align="right">&nbsp;</td>
        <td WIDTH="110" align="right">-3,585.00</td>
        <td WIDTH="30" align="right">借</td>
        <td WIDTH="110" align="right">3,238,754.20</td>
      </tr>
       
      <tr bgcolor="#F0F0F0"> 
        <td WIDTH="30">10</td>
        <td WIDTH="30">13</td>
        <td WIDTH="60"><a href="/selfservice/servlet/cnpc.servlet.JournalServlet?func=0&dwbh=0001&year=2004&month=10&pzbh=11X0189">11X0189</a></td>
        <td WIDTH="80"> </td>
        <td WIDTH="300">我的公司退永和五金建材商店维修费</td>
        <td WIDTH="110" align="right">&nbsp;</td>
        <td WIDTH="110" align="right">-1,600.00</td>
        <td WIDTH="30" align="right">借</td>
        <td WIDTH="110" align="right">3,240,354.20</td>
      </tr>
       
      <tr bgcolor="#F0F0F0"> 
        <td WIDTH="30">10</td>
        <td WIDTH="30">14</td>
        <td WIDTH="60"><a href="/selfservice/servlet/cnpc.servlet.JournalServlet?func=0&dwbh=0001&year=2004&month=10&pzbh=11X0200">11X0200</a></td>
        <td WIDTH="80">93655</td>
        <td WIDTH="300">我的公司付石油管理局我的公司提取经费</td>
        <td WIDTH="110" align="right">&nbsp;</td>
        <td WIDTH="110" align="right">50,000.00</td>
        <td WIDTH="30" align="right">借</td>
        <td WIDTH="110" align="right">3,190,354.20</td>
      </tr>
       
      <tr bgcolor="#F0F0F0"> 
        <td WIDTH="30">10</td>
        <td WIDTH="30">14</td>
        <td WIDTH="60"><a href="/selfservice/servlet/cnpc.servlet.JournalServlet?func=0&dwbh=0001&year=2004&month=10&pzbh=11X0201">11X0201</a></td>
        <td WIDTH="80">93656</td>
        <td WIDTH="300">我的公司付石油管理局我的公司提取经费</td>
        <td WIDTH="110" align="right">&nbsp;</td>
        <td WIDTH="110" align="right">50,000.00</td>
        <td WIDTH="30" align="right">借</td>
        <td WIDTH="110" align="right">3,140,354.20</td>
      </tr>
       
      <tr bgcolor="#F0F0F0"> 
        <td WIDTH="30">10</td>
        <td WIDTH="30">14</td>
        <td WIDTH="60"><a href="/selfservice/servlet/cnpc.servlet.JournalServlet?func=0&dwbh=0001&year=2004&month=10&pzbh=11X0202">11X0202</a></td>
        <td WIDTH="80">507229</td>
        <td WIDTH="300">我的公司付东营天成恒信科技大厦办公费</td>
        <td WIDTH="110" align="right">&nbsp;</td>
        <td WIDTH="110" align="right">2,480.00</td>
        <td WIDTH="30" align="right">借</td>
        <td WIDTH="110" align="right">3,137,874.20</td>
      </tr>
       
      <tr bgcolor="#F0F0F0"> 
        <td WIDTH="30">10</td>
        <td WIDTH="30">14</td>
        <td WIDTH="60"><a href="/selfservice/servlet/cnpc.servlet.JournalServlet?func=0&dwbh=0001&year=2004&month=10&pzbh=11X0203">11X0203</a></td>
        <td WIDTH="80">507227</td>
        <td WIDTH="300">我的公司付中国石化集团胜利石油管理局我的公司奖金</td>
        <td WIDTH="110" align="right">&nbsp;</td>
        <td WIDTH="110" align="right">84,907.00</td>
        <td WIDTH="30" align="right">借</td>
        <td WIDTH="110" align="right">3,052,967.20</td>
      </tr>
       
      <tr bgcolor="#F0F0F0"> 
        <td WIDTH="30">10</td>
        <td WIDTH="30">14</td>
        <td WIDTH="60"><a href="/selfservice/servlet/cnpc.servlet.JournalServlet?func=0&dwbh=0001&year=2004&month=10&pzbh=11X0204">11X0204</a></td>
        <td WIDTH="80"> </td>
        <td WIDTH="300">我的公司付东营市地税局税金</td>
        <td WIDTH="110" align="right">&nbsp;</td>
        <td WIDTH="110" align="right">3,153.90</td>
        <td WIDTH="30" align="right">借</td>
        <td WIDTH="110" align="right">3,049,813.30</td>
      </tr>
       
      <tr bgcolor="#F0F0F0"> 
        <td WIDTH="30">10</td>
        <td WIDTH="30">14</td>
        <td WIDTH="60"><a href="/selfservice/servlet/cnpc.servlet.JournalServlet?func=0&dwbh=0001&year=2004&month=10&pzbh=11X0205">11X0205</a></td>
        <td WIDTH="80">507228</td>
        <td WIDTH="300">我的公司付东营市远信电器与技术有限责任公司办公费</td>
        <td WIDTH="110" align="right">&nbsp;</td>
        <td WIDTH="110" align="right">3,750.00</td>
        <td WIDTH="30" align="right">借</td>
        <td WIDTH="110" align="right">3,046,063.30</td>
      </tr>
       
      <tr bgcolor="#F0F0F0"> 
        <td WIDTH="30">10</td>
        <td WIDTH="30">15</td>
        <td WIDTH="60"><a href="/selfservice/servlet/cnpc.servlet.JournalServlet?func=0&dwbh=0001&year=2004&month=10&pzbh=11X0235">11X0235</a></td>
        <td WIDTH="80"> </td>
        <td WIDTH="300">我的公司付东营市双盈商贸有限公司维修费</td>
        <td WIDTH="110" align="right">&nbsp;</td>
        <td WIDTH="110" align="right">-5,300.00</td>
        <td WIDTH="30" align="right">借</td>
        <td WIDTH="110" align="right">3,051,363.30</td>
      </tr>
       
      <tr bgcolor="#F0F0F0"> 
        <td WIDTH="30">10</td>
        <td WIDTH="30">15</td>
        <td WIDTH="60"><a href="/selfservice/servlet/cnpc.servlet.JournalServlet?func=0&dwbh=0001&year=2004&month=10&pzbh=11X0236">11X0236</a></td>
        <td WIDTH="80">507230</td>
        <td WIDTH="300">我的公司付东营市双盈商贸有限公司维修费</td>
        <td WIDTH="110" align="right">&nbsp;</td>
        <td WIDTH="110" align="right">5,300.00</td>
        <td WIDTH="30" align="right">借</td>
        <td WIDTH="110" align="right">3,046,063.30</td>
      </tr>
      

  8.   

    </table>
    <table border="0" width="860">
      <tr> 
        <td width="12%" align="center">第<strong><font color="#0000FF">4</font></strong>页共<strong><font color="#0000FF">12</font></strong>页</td>
        <td width="66%" align="center"><hr align="left"></td>
        <td width="22%" align="center"><a href='/selfservice/servlet/cnpc.servlet.ReckoningServlet?func=1'>首页</a> <a href='/selfservice/servlet/cnpc.servlet.ReckoningServlet?func=3&num=3'>上一页</a> <a href='/selfservice/servlet/cnpc.servlet.ReckoningServlet?func=3&num=5'>下一页</a> <a href='/selfservice/servlet/cnpc.servlet.ReckoningServlet?func=2'>末页</a></td>
      </tr>
      <tr> 
        <td width="100%" colspan="3"><font color="#804040"><strong><u>(注:点击凭证号联查凭证)</u></strong></font></td>
      </tr>
    </table>
    </body>
    </html>
    转换后希望将表格中的有用数据提取出来,放到excle中也可以放到oracle中,总之提出来就行/感谢
      

  9.   

    pigo(~_~ ^-^. 。o 0 O O=8526 && 1562=O O 0 o 。. ^-) 
    说的   用httpunit来解析,或者用专门的htmlpraser比较好。
    我都没听过,能否详细说说。
      

  10.   

    不好意思,昨天晚上不能上csdn了
    现在大概把昨天写的代码贴出来
    不单纯是用正则表达式,而且仅仅是为了实现你的目标(提取数据)
    代码有些乱,希望不影响你的阅读,-_-#package com.zcjl.test;import java.io.*;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    public class TestRegex {
        public static void main(String[] args) {
                String content = "..."; // 解析html取得的原始数据,String类型
                content = gettable(content); // 取得包含数据的<tr></tr>块
                content =
                    content
                        .replaceAll("\\s*</tr.*?>\\s*", "-n-") // 把</tr>换成临时代替换行的-n-
                        .replaceAll("</td>", ":") // 把</td>换成数据分隔符:
                        .replaceAll("\\s*<.*?>\\s*", "") // 去掉多余的html标签和空白区域
                        .replaceAll("-n-", "\n") // 把临时换行标志-n-转换成真正的换行符,以此区分每一行数据
                        .replaceAll("&nbsp;", ""); // 去掉html的空格
        }    private static String gettable(String htmlstr) {
            String rs = htmlstr.substring(htmlstr.indexOf("<table"), htmlstr.lastIndexOf("<table"));
            rs = rs.substring(rs.lastIndexOf("<table"));
            rs = rs.substring(rs.indexOf("</tr>") + 5);
            rs = rs.substring(rs.indexOf("</tr>") + 5);
            return rs;
        }
    }最终的结果应该如下所示:
    10:13:11X0188::我的公司退东营奥拓石油新技术有限责任公司款:&nbsp;:-3,585.00:借:3,238,754.20:
    10:13:11X0189::我的公司退永和五金建材商店维修费:&nbsp;:-1,600.00:借:3,240,354.20:
    10:14:11X0200:93655:我的公司付石油管理局我的公司提取经费:&nbsp;:50,000.00:借:3,190,354.20:
    10:14:11X0201:93656:我的公司付石油管理局我的公司提取经费:&nbsp;:50,000.00:借:3,140,354.20:
    10:14:11X0202:507229:我的公司付东营天成恒信科技大厦办公费:&nbsp;:2,480.00:借:3,137,874.20:
    10:14:11X0203:507227:我的公司付中国石化集团胜利石油管理局我的公司奖金:&nbsp;:84,907.00:借:3,052,967.20:
    10:14:11X0204::我的公司付东营市地税局税金:&nbsp;:3,153.90:借:3,049,813.30:
    10:14:11X0205:507228:我的公司付东营市远信电器与技术有限责任公司办公费:&nbsp;:3,750.00:借:3,046,063.30:
    10:15:11X0235::我的公司付东营市双盈商贸有限公司维修费:&nbsp;:-5,300.00:借:3,051,363.30:
    10:15:11X0236:507230:我的公司付东营市双盈商贸有限公司维修费:&nbsp;:5,300.00:借:3,046,063.30:自己通过String的split方法去把数据分解成你需要的格式就ok了
    ^_^