你的数据应该是这样的
<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>劈开这样不就的到所有的数据了吗
<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>劈开这样不就的到所有的数据了吗
我在另一个帖子写的Demo,去看一下吧。
先谢谢你,我试一下。为什么女的问的问题这么多人回答,我的几乎没人管。看来还是男人多!
没有看见你的帖子而已。类似的问题我也处理过,不建议用正则表达式,
用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]; } }
因为是处理别人的页面,所以不能写成xhtml.
转换前的html附上
<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"> </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"> </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"> </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"> </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"> </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"> </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"> </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"> </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"> </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"> </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>
<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中,总之提出来就行/感谢
说的 用httpunit来解析,或者用专门的htmlpraser比较好。
我都没听过,能否详细说说。
现在大概把昨天写的代码贴出来
不单纯是用正则表达式,而且仅仅是为了实现你的目标(提取数据)
代码有些乱,希望不影响你的阅读,-_-#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(" ", ""); // 去掉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::我的公司退东营奥拓石油新技术有限责任公司款: :-3,585.00:借:3,238,754.20:
10:13:11X0189::我的公司退永和五金建材商店维修费: :-1,600.00:借:3,240,354.20:
10:14:11X0200:93655:我的公司付石油管理局我的公司提取经费: :50,000.00:借:3,190,354.20:
10:14:11X0201:93656:我的公司付石油管理局我的公司提取经费: :50,000.00:借:3,140,354.20:
10:14:11X0202:507229:我的公司付东营天成恒信科技大厦办公费: :2,480.00:借:3,137,874.20:
10:14:11X0203:507227:我的公司付中国石化集团胜利石油管理局我的公司奖金: :84,907.00:借:3,052,967.20:
10:14:11X0204::我的公司付东营市地税局税金: :3,153.90:借:3,049,813.30:
10:14:11X0205:507228:我的公司付东营市远信电器与技术有限责任公司办公费: :3,750.00:借:3,046,063.30:
10:15:11X0235::我的公司付东营市双盈商贸有限公司维修费: :-5,300.00:借:3,051,363.30:
10:15:11X0236:507230:我的公司付东营市双盈商贸有限公司维修费: :5,300.00:借:3,046,063.30:自己通过String的split方法去把数据分解成你需要的格式就ok了
^_^