最近java群好友发来一个html代码,要帮忙匹配查找html代码里面特定的内容:
代码如下:
-
年代:2013年
-
朝向:东北
-
楼层:第10层(共33层)
-
结构:平层
-
装修:毛坯
-
住宅类别:普通住宅
-
建筑类别:板楼
-
产权性质:个人产权
需求为找到 span中内容为:住宅类别的中后面的内容,即获取“普通住宅”文本,通过分析发现如果直接匹配到具体的
住宅类别:普通住宅发现会有点麻烦, 因为以
开头 并以结束的模式如果写的不好会匹配整个大段的html(去掉开头和结尾的dl)。所以匹配模式改为先匹配每一个dd中的内容,则模式为:
String regex2 = "
([\\s\\S]*?)";然后将匹配的dd字符串在去匹配span查找是否存在“住宅类别”文字。如果匹配说明是我们需要查找的
匹配span的模式为:
String regex3 = "住宅类别";
如果找到匹配的dd则将dd标签和span标签全部替换掉:思路如下:
dd=dd.replaceAll("
", "");//替换开头的dddd=dd.replaceAll("
", "");//替换结束的订单dd=dd.replaceAll("", "");//替换span标签
完整代码如下:
由于对正则不是很熟悉,纯粹的摸索。如果有更好的实现方法,往各位看官不吝赐教。
public static void main(String[] args) {
String oriStr = "
"
"+" 年代:2013年
"+"
"+" 朝向:东北
"+"
"+" 楼层:第10层(共33层)
"+"
"+" 结构:平层
"+"
"+" 装修:毛坯
"+"
"+" 住宅类别:普通住宅
"+"
"+" 建筑类别:板楼
"+"
"+" 产权性质:个人产权
"+"
"+"
";String regex2 = "
([\\s\\S]*?)";String regex3 = "住宅类别";
Pattern pattern2 = Pattern.compile (regex2);
Pattern pattern3 = Pattern.compile (regex3);
Matcher match2 = pattern2.matcher (oriStr);
Matcher match3 = null;
while (match2.find ()){//取的每个dd标签
String dd = match2.group ();
System.out.println(dd);
match3 = pattern3.matcher(dd);
if(match3.find()){//找到dd中含有住宅列别的span 将没用的替换掉
dd=dd.replaceAll("
", "");dd=dd.replaceAll("
", "");dd=dd.replaceAll("", "");
System.out.println("\n\n\n\n\n找到啦......"+dd+"\n\n\n\n");
}
}
}