【100分求正解】求正则,求恩赐,求解脱

bb892766830 2013-01-09 03:15:39
<li class="item"><a onclick="" href="/attraction_review-d19-s64844-05p1-huangshanfengjingqu.html">很好</a><span class="rank-bar"><em style="width: 80px"></em></span><a onclick="" href="/attraction_review-d19-s64844-05p1-huangshanfengjingqu.html">8</a></li><li class="item"><a onclick="" href="/attraction_review-d19-s64844-04p1-huangshanfengjingqu.html">较好</a><span class="rank-bar"><em style="width: 10px"></em></span><a onclick="" href="/attraction_review-d19-s64844-04p1-huangshanfengjingqu.html">1</a></li><li class="item"><span class="fake-a">一般</span><span class="rank-bar"><em style="width: 0px"></em></span><span class="fake-a">0</span></li><li class="item"><a onclick="" href="/attraction_review-d19-s64844-02p1-huangshanfengjingqu.html">较差</a><span class="rank-bar"><em style="width: 10px"></em></span><a onclick="" href="/attraction_review-d19-s64844-02p1-huangshanfengjingqu.html">1</a></li><li class="item"><span class="fake-a">很差</span><span class="rank-bar"><em style="width: 0px"></em></span><span class="fake-a">0</span></li></ul></div></div>

正则分别匹配很好的评价数 8 较好的评论数 1 很差的评论数 0
说明:很好,8,较好,1前面的<a>中的href会变动,最后取值需要group(0)
...全文
197 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
长笛党希望 2013-01-09
  • 打赏
  • 举报
回复
楼主喜欢用PA?
suciver 2013-01-09
  • 打赏
  • 举报
回复
虽然不知道楼主为何会有这种需求不过还是写了一个

String html=你的html内容;
String[] s={"很好","较好","一般","较差","很差"};
int start=0;//正则搜索的起始位置
Pattern p=null;
for(int i=0;i<s.length;i++){
p=(i!=s.length-1)?Pattern.compile("(?<=>)\\d+(?=<.*?"+s[i+1]+")"):Pattern.compile("(?<=>)\\d+(?=<.*?)");
Matcher m=p.matcher(html);
if(m.find(start)){
	start=m.end();//下一次搜索的起始位置
	System.out.println(s[i]+":"+m.group());
   }
}
suciver 2013-01-09
  • 打赏
  • 举报
回复
1个正则能弄完干嘛要5个正则啊,这不是浪费性能吗
bb892766830 2013-01-09
  • 打赏
  • 举报
回复
引用 3 楼 suciver 的回复:
如果就在这个字符串里面,格式是固定的话。可以这样 Java code ? 123456 String s=你上面的html串; Matcher m=Pattern.compile("(?<=>).*?(?=(</a>|</span>))").matcher(s); while(m.find()){ System.out.println(m.group()); ……
我一开始用的是下面这个方法: Pattern p1 = Pattern.compile("(?<=>)\\d+(?=<)"); Matcher m1 = p1.matcher(“html内容”); String str = null; while (m1.find()) { str = m1.group(); System.out.println(str); } 但是要求是配5个正则通过循环分别匹配五种评论数,下面这段代码是给定的,能否实现呢 Pattern p1 = Pattern.compile("对应正则"); Matcher m1 = p1.matcher(“html内容”); String str = null; if (m1.find()) { str = m1.group(0); } System.out.println(str);
suciver 2013-01-09
  • 打赏
  • 举报
回复
引用 3 楼 suciver 的回复:
如果就在这个字符串里面,格式是固定的话。可以这样 Java code ? 123456 String s=你上面的html串; Matcher m=Pattern.compile("(?<=>).*?(?=(</a>|</span>))").matcher(s); while(m.find()){ System.out.println(m.group()); ……
单独要拿数字正则改成 "(?<=>)\\d+(?=(</a>|</span>))"
suciver 2013-01-09
  • 打赏
  • 举报
回复
如果就在这个字符串里面,格式是固定的话。可以这样

String s=你上面的html串;
Matcher m=Pattern.compile("(?<=>).*?(?=(</a>|</span>))").matcher(s);
while(m.find()){
   System.out.println(m.group());
}
_jerrytiger 2013-01-09
  • 打赏
  • 举报
回复


public class Test05 {

	static String str = "<li class=\"item\"><a onclick=\"\" href=\"/attraction_review-d19-s64844-05p1-huangshanfengjingqu.html\">很好</a><span class=\"rank-bar\"><em style=\"width: 80px\"></em></span><a onclick=\"\" href=\"/attraction_review-d19-s64844-05p1-huangshanfengjingqu.html\">8</a></li><li class=\"item\"><a onclick=\"\" href=\"/attraction_review-d19-s64844-04p1-huangshanfengjingqu.html\">较好</a><span class=\"rank-bar\"><em style=\"width: 10px\"></em></span><a onclick=\"\" href=\"/attraction_review-d19-s64844-04p1-huangshanfengjingqu.html\">1</a></li><li class=\"item\"><span class=\"fake-a\">一般</span><span class=\"rank-bar\"><em style=\"width: 0px\"></em></span><span class=\"fake-a\">0</span></li><li class=\"item\"><a onclick=\"\" href=\"/attraction_review-d19-s64844-02p1-huangshanfengjingqu.html\">较差</a><span class=\"rank-bar\"><em style=\"width: 10px\"></em></span><a onclick=\"\" href=\"/attraction_review-d19-s64844-02p1-huangshanfengjingqu.html\">1</a></li><li class=\"item\"><span class=\"fake-a\">很差</span><span class=\"rank-bar\"><em style=\"width: 0px\"></em></span><span class=\"fake-a\">0</span></li></ul></div></div>";

	//[很好 , 较好 , 较差 ] 都用这个方法
	static String findA(String key){
		String regexp = "<a.*?href=\"(.*?)\".*?>" + key + "</a>.*?<a.*?href=\"(\\1)\".*?>(.*?)</a>";
		Matcher m = Pattern.compile(regexp).matcher(str);
		if(m.find()){
			return m.group(3);
		}
		return null ;
	}
	
	// [一般 、很差 ] 用这个方法 , 因为结构与上面的不同
	static String findB(String key){
		String regexp = "<span class=\"fake-a\">" + key + "</span>.*?<span class=\"fake-a\">(.*?)</span>";
		Matcher m = Pattern.compile(regexp).matcher(str);
		if(m.find()){
			return m.group(1);
		}
		return null ;
	}

	public static void main(String[] args) {
		System.out.println(findA("很好"));
		System.out.println(findA("较好"));
		System.out.println(findA("较差"));
		
		System.out.println(findB("一般"));
		System.out.println(findB("很差"));

	}
}

bb892766830 2013-01-09
  • 打赏
  • 举报
回复
求神,求大神

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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