java正则表达式识别html内容

干饭人之路 2018-10-07 11:36:07
html网页中有很多条:
<tr class="z_tr_hui">
<td>20180001</td>
<td class="z_font_red"> 534234143432 </td>
<td class="z_font_blue"> 1232 </td>
<td>1330</td>
<td>5453</td>
</tr>
<tr class="z_tr_fen">
<td>20180002</td>
<td class="z_font_red"> 534234143432 </td>
<td class="z_font_blue"> 1233 </td>
<td>1220</td>
<td>5333</td>
</tr>
<tr class="z_tr_hui">
<td>20180003</td>
<td class="z_font_red"> 534234143432 </td>
<td class="z_font_blue"> 1234 </td>
<td>1231</td>
<td>5354</td>
</tr>
<tr class="z_tr_fen">
<td>20180004</td>
<td class="z_font_red"> 534234143432 </td>
<td class="z_font_blue"> 1235 </td>
<td>1230</td>
<td>5353</td>
</tr>
这样的html代码

怎么编写正则表达式,已识别上述3种td的内容?


Document doc = Jsoup.parse(html);
Elements trs = doc.select(正则表达式);

请各位大侠写出示例,谢谢。
...全文
902 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
4qw 2018-10-19
  • 打赏
  • 举报
回复
好吧,没注意看,已经在用了
4qw 2018-10-19
  • 打赏
  • 举报
回复
属于网页爬虫方面的知识,可以了解下
4qw 2018-10-19
  • 打赏
  • 举报
回复
使用 Jsoup 解析html 页面就可以了
    String html = "<html><head><title>开源中国社区</title></head>" + "<body><a>17-06-18_00.tar.gz</a> </body></html>";
Document doc =Jsoup.parse(html);
Elements links = doc.select("a");
for (Element link : links) {
String linkHref = link.attr("href");
String linkText = link.text();
System.out.println(linkHref);
System.out.println(linkText);
}
rickylin86 2018-10-10
  • 打赏
  • 举报
回复
上面的代码也可以针对在如下的HTML代码获取td标签内容

<td 属性 = "直" 是否换行="yes">
TD中起始标签
和结束标签不同行

内容也是多行的
</td>
rickylin86 2018-10-10
  • 打赏
  • 举报
回复
将需要测试的HTML代码保存在当前目录下的source.html文件中. Java代码如下:

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.Scanner;


import java.nio.file.Paths;
import java.nio.file.Path;
import java.io.IOException;


public class Test{
	public static void main(String[] args){
		String regex = "(?x)<td(\\s+[^=]+=\\s*\"[^\"]*\")*\\s*>\\s*(?<content>[^<]*?)\\s*</td>";
		Pattern pattern = Pattern.compile(regex);
		String content = loadContent();
		Matcher matcher = pattern.matcher(content);
		while(matcher.find()){
			System.out.println(matcher.group("content"));
		}
	}

	private static String loadContent(){
		Path path = Paths.get("source.html");
		StringBuffer content = new StringBuffer();
		try(Scanner source = new Scanner(path);){
			while(source.hasNextLine()){
				content.append(source.nextLine() + System.lineSeparator());
			}
		}catch(IOException e){
			e.printStackTrace();
			return null;
		}
		return content.toString();
	}
}
Surrin1999 2018-10-09
  • 打赏
  • 举报
回复
引用 2 楼 ecardttt 的回复:
楼上Surrin1999,你好: 这个网址 view-source:https://m.78500.cn/zs/ssq/ 无法用你给的正则表达式获取号码,能否进一步改一下,分可以再加。

你把完整要匹配的文档发出来吧
nayi_224 2018-10-09
  • 打赏
  • 举报
回复
用了一楼的代码,这不是基本把td的内容扒出来了么,除了带汉字的和有多个class的。
package test.gt50;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test57 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
        try {
            URL url = new URL("https://m.78500.cn/zs/ssq/");
            InputStream in =url.openStream();
            InputStreamReader isr = new InputStreamReader(in,"GBK");
            BufferedReader bufr = new BufferedReader(isr);
            String str;
            StringBuffer sb = new StringBuffer();
            while ((str = bufr.readLine()) != null) {
                //System.out.println(str);
            	sb.append(str);
            }
            bufr.close();
            isr.close();
            in.close();
            
            String regex = "<td\\s?(class=[\\p{Punct}\\p{Alpha}]+)?>\\s*\\w+\\s*</td>";
            Matcher m = Pattern.compile(regex).matcher(sb.toString());
            while (m.find()) {
                //System.out.println(m.group().replaceAll("[(<td\\s?(class=[\\p{Punct}\\p{Alpha}]+)?)(</td>)]", "").trim());
            	System.out.println(m.group());
            }
            
        } catch (Exception e) {
            e.printStackTrace();
        }
	}

}
Surrin1999 2018-10-09
  • 打赏
  • 举报
回复
引用 2 楼 ecardttt 的回复:
楼上Surrin1999,你好: 这个网址 view-source:https://m.78500.cn/zs/ssq/ 无法用你给的正则表达式获取号码,能否进一步改一下,分可以再加。


又努力了一下 可以了 要不加个分 想了好久


// s为你的html
String s = "xxx";
String regex = "<td\\s?(class=[\\p{Punct}\\p{Alpha}]+)?>[\\p{Alpha}\\s\\w(\u4E00-\u9FA5):]*</td>";

Matcher m = Pattern.compile(regex).matcher(s);
while (m.find()) {
String temp = m.group();
String str = temp.replaceAll("</td>", "");
int index = str.indexOf(">");
String ss = str.substring(index+1).trim();
System.out.println(ss);
}
Surrin1999 2018-10-09
  • 打赏
  • 举报
回复
再努力了一下 没能写出匹配这个网站的完美的
Surrin1999 2018-10-08
  • 打赏
  • 举报
回复

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test12 {
public static void main(String[] args) {
String s= "<tr class=\"z_tr_hui\">\r\n" +
"<td>20180001</td>\r\n" +
"<td class=\"z_font_red\"> 534234143432 </td>\r\n" +
"<td class=\"z_font_blue\"> 1232 </td>\r\n" +
"<td>1330</td>\r\n" +
"<td>5453</td>\r\n" +
"</tr>\r\n" +
"<tr class=\"z_tr_fen\">\r\n" +
"<td>20180002</td>\r\n" +
"<td class=\"z_font_red\"> 534234143432 </td>\r\n" +
"<td class=\"z_font_blue\"> 1233 </td>\r\n" +
"<td>1220</td>\r\n" +
"<td>5333</td>\r\n" +
"</tr>\r\n" +
"<tr class=\"z_tr_hui\">\r\n" +
"<td>20180003</td>\r\n" +
"<td class=\"z_font_red\"> 534234143432 </td>\r\n" +
"<td class=\"z_font_blue\"> 1234 </td>\r\n" +
"<td>1231</td>\r\n" +
"<td>5354</td>\r\n" +
"</tr>\r\n" +
"<tr class=\"z_tr_fen\">\r\n" +
"<td>20180004</td>\r\n" +
"<td class=\"z_font_red\"> 534234143432 </td>\r\n" +
"<td class=\"z_font_blue\"> 1235 </td>\r\n" +
"<td>1230</td>\r\n" +
"<td>5353</td>\r\n" +
"</tr>";
String regex = "<td\\s?(class=[\\p{Punct}\\p{Alpha}]+)?>\\s*\\w+\\s*</td>";
Matcher m = Pattern.compile(regex).matcher(s);
while (m.find()) {
System.out.println(m.group().replaceAll("[(<td\\s?(class=[\\p{Punct}\\p{Alpha}]+)?)(</td>)]", "").trim());
}
}
}
干饭人之路 2018-10-08
  • 打赏
  • 举报
回复
楼上Surrin1999,你好: 这个网址 view-source:https://m.78500.cn/zs/ssq/ 无法用你给的正则表达式获取号码,能否进一步改一下,分可以再加。

62,612

社区成员

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

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