高分求解一个正则表达式!急!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

lkenshin 2003-05-02 12:03:07
比如:一个String 包含下列内容
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD>

<BODY>
<TABLE>
<TR>
<TD>111111111111</TD>
<TD>222222222222</TD>
<TD>333333333333</TD>
<TD>444444444444</TD>
</TR>
<TR>
<TD>5555555555555</TD>
<TD>6666666666666</TD>
<TD>77777777777777</TD>
<TD>88888888888888</TD>
</TR>
<TR>
<TD>aaaaaaaaaaaaaaa</TD>
<TD>bbbbbbbbbbbbbb</TD>
<TD>cccccccccccccccccc</TD>
<TD>ddddddddddddddd</TD>
</TR>
</TABLE>
</BODY>
</HTML>

现在需要将每个<tr></tr>之间的内容取出来,存放到Vector中,该怎么写???
...全文
25 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
nichijff 2003-05-27
  • 打赏
  • 举报
回复
居然没高手??
sunsetback 2003-05-25
  • 打赏
  • 举报
回复
成功了?
Jawan_lee 2003-05-25
  • 打赏
  • 举报
回复
看来编辑原理也很重要啊
seven1996 2003-05-25
  • 打赏
  • 举报
回复
注释写错地方了
while (str_temp.hasMoreTokens())
{ if (i%2==0) //判断是否是是在TD>之间是的话,取出String
.......
seven1996 2003-05-25
  • 打赏
  • 举报
回复
楼主我也试试
假设符合你的String 已经存在为 temp
StringTokenizer str_temp;
str_temp = new StringTokenizer(temp,"TD>");
Vector V=new Vector(10,10);
int i=0;
while (str_temp.hasMoreTokens())//判断是否是是在TD>之间是的话,取出String
{ if (i%2==1)
{ String s1 = str_temp.nextToken();//s1形式应该是5555555555555</
s1 = s1.substring(0, s1.length() - 2);//s1形式应该是5555555555555
V.addElement(new String(s1));//放入Vector中
}
i++;
}
最后Vector中的元素即为所要的有用的String
刚才昏头了
不需要再操作Vector直接在插入时对s1做处理就可以
seven1996 2003-05-25
  • 打赏
  • 举报
回复
楼主我也试试
假设符合你的String 已经存在为 temp
StringTokenizer str_temp;
str_temp = new StringTokenizer(temp,"TD>");
Vector V=new Vector(10,10);
int i=0;
while (str_temp.hasMoreTokens())//判断是否是是在TD>之间是的话,取出String
{ if (i%2==1)
{ String s1 = str_temp.nextToken();//s1形式应该是5555555555555</
V.addElement(new String(s1));//放入Vector中
}
i++;
}
int Maxvalue=V.size();
if (Maxvalue>0)
for(i=0;i<=Maxvalue-1;i++)
{ String s2=(String)V.elementAt(i)
s2 = s2.substring(0, s2.length() - 2);//s2形式应该是5555555555555
V.setElementAt(s2,i);//放入Vector中
};
最后Vector中的元素即为所要的有用的String
seagate 2003-05-25
  • 打赏
  • 举报
回复
这是HTML文件解析,为什么要用正则表达式呢?好像有个HTML类可以。
希偌 2003-05-02
  • 打赏
  • 举报
回复
sorry
String str1 = "[^(<TR>)]*<TR>([^(<\\/TR>)]*)<\\/TR>";
-->
String str1 = "[^(<\\/TR>)]*<TR>([^(<\\/TR>)]*)<\\/TR>";
希偌 2003-05-02
  • 打赏
  • 举报
回复
不知道行不行,你试试吧
import java.util.regex.*;

String str = "<TR>111</TR>123<TR>222</TR>";
String str1 = "[^(<TR>)]*<TR>([^(<\\/TR>)]*)<\\/TR>";
java.util.regex.Pattern p = Pattern.compile(str1);
Matcher m = p.matcher(str);
boolean f = m.find();
Vector v=new Vector();
while (f) {
StringBuffer sb = new StringBuffer();
m=m.appendReplacement(sb, "$1");
v.addElement(sb.toString());
f = m.find();
}
lkenshin 2003-05-02
  • 打赏
  • 举报
回复
没人会啊???
高手呢????
希偌 2003-05-02
  • 打赏
  • 举报
回复
把正则表达式改成
<TR>([^(<\\/TR>)|\\n]*)|(\\n)<\\/TR>
.居然不认\n,倒
lkenshin 2003-05-02
  • 打赏
  • 举报
回复
没人知道吗??
喜宝的爸 2003-05-02
  • 打赏
  • 举报
回复
关注ing
lkenshin 2003-05-02
  • 打赏
  • 举报
回复
谢谢了^_^
小弟实在是被搞晕了
希偌 2003-05-02
  • 打赏
  • 举报
回复
looking
lkenshin 2003-05-02
  • 打赏
  • 举报
回复
还有一个情况,就是如果是这样的形式:
<tr>dfdfdfdf</tr>
如果用正则表达式抽取<tr>与</tr>之间的内容,那么可以得到 dfdfdfdf

但是如果是这样的形式:
<tr>
<td>sdfsdfsdf</td>
<td>werwerwer</td>
</tr>
如果用正则表达式抽取<tr>与</tr>之间的内容,则得到的不是
<td>sdfsdfsdf</td>
<td>werwerwer</td>
为什么呢?
lkenshin 2003-05-02
  • 打赏
  • 举报
回复
好像不行,请看:
import java.util.*;
import java.util.regex.*;
import java.io.*;

public class regexTest {
private String getString(){
try{
FileInputStream fin = new FileInputStream("test.txt");
BufferedReader bfr = new BufferedReader(new InputStreamReader(fin));
StringBuffer sbf = new StringBuffer();
String line = "";
while((line = bfr.readLine()) != null){
sbf = sbf.append(line);
sbf = sbf.append("\n");
}
bfr.close();
//System.out.println(sbf.toString());
return sbf.toString();
}catch(Exception e){
e.printStackTrace();
return null;
}
}

//

private Vector doRegex(String source){
if(source == null || source.length() <= 0){
return null;
}else{
String tr = "[^(<\\/TR>)]*<TR>([^(<\\/TR>)]*)<\\/TR>";
Pattern p = Pattern.compile(tr);
Matcher m = p.matcher(source);
boolean b = m.find();
StringBuffer sbf = new StringBuffer();
Vector v = new Vector();
while(b){
m.appendReplacement(sbf,"$1");
String s = sbf.toString();
v.add(s);
b = m.find();
}
m.appendTail(sbf);
v.add(sbf.toString());
return v;
}//end else
}

public static void main(String[] args){
regexTest test = new regexTest();
String s = test.getString();
Vector vv = test.doRegex(s);
int size = vv.size();
if(vv != null && size > 0){
for(int i = 0;i < size ; i++){
String sss = (String)vv.elementAt(i);
System.out.println(i+": " + sss+"\n\n\n");
}
}
}
}

把题目里面的那段文字copy下来保存为test.txt,然后,把上面那个类编译运行,得出的结果不是想要的结果,


请问还有别的方法吗?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧