java正则匹配html片段,并取得标签中的内容




        最近java群好友发来一个html代码,要帮忙匹配查找html代码里面特定的内容:

        代码如下:

Html代码   收藏代码
  1. <dl>  
  2.   
  3. <dd>  
  4.     <span class="gray6"><span class="padl27"></span>代:</span>2013年</dd>  
  5.   
  6. <dd>  
  7.     <span class="gray6"><span class="padl27"></span>向:</span>东北</dd>  
  8.   
  9. <dd>  
  10.     <span class="gray6"><span class="padl27"></span>层:</span>第10层(共33层)</dd>  
  11.   
  12. <dd>  
  13.     <span class="gray6 "><span class="padl27"></span>构:</span>平层</dd>  
  14.   
  15. <dd>  
  16.     <span class="gray6"><span class="padl27"></span>修:</span>毛坯</dd>  
  17.   
  18. <dd>  
  19.     <span class="gray6">住宅类别:</span>普通住宅</dd>  
  20.   
  21. <dd>  
  22.     <span class="gray6">建筑类别:</span>板楼</dd>  
  23.   
  24. <dd>  
  25.     <span class="gray6 ">产权性质:</span>个人产权</dd>  
  26.   
  27. <dd>  
  28.   
  29. </dl>  

 

伦理片 http://www.dotdy.com/

     需求为找到 span中内容为:住宅类别的中后面的内容,即获取“普通住宅”文本,通过分析发现如果直接匹配到具体的

Html代码   收藏代码
  1. <dd>  <span class="gray6">住宅类别:</span>普通住宅</dd>  

 

 发现会有点麻烦, 因为以<dd>开头 并以</dd>结束的模式如果写的不好会匹配整个大段的html(去掉开头和结尾的dl)。所以匹配模式改为先匹配每一个dd中的内容, 

 则模式为:

Java代码   收藏代码
  1. String regex2 = "<dd.*?>([\\s\\S]*?)</dd>";  

 

 然后将匹配的dd字符串在去匹配span查找是否存在“住宅类别”文字。如果匹配说明是我们需要查找的

 匹配span的模式为:

Java代码   收藏代码
  1. String regex3 = "<span.*?>住宅类别";  

 如果找到匹配的dd则将dd标签和span标签全部替换掉:思路如下:

Java代码   收藏代码
  1. dd=dd.replaceAll("<dd>""");//替换开头的dd  
  2. dd=dd.replaceAll("</dd>""");//替换结束的订单  
  3. dd=dd.replaceAll("<span.*?</span>""");//替换span标签  

  

 完整代码如下:

 由于对正则不是很熟悉,纯粹的摸索。如果有更好的实现方法,往各位看官不吝赐教。

 

Java代码   收藏代码
  1. public static void main(String[] args) {  
  2.           
  3.         String oriStr = "<dl>"+  
  4.                 "<dd>"+  
  5.                 "    <span class=\"gray6\">年<span class=\"padl27\"></span>代:</span>2013年</dd>"+  
  6.                 "<dd>"+  
  7.                 "    <span class=\"gray6\">朝<span class=\"padl27\"></span>向:</span>东北</dd>"+  
  8.                 "<dd>"+  
  9.                 "    <span class=\"gray6\">楼<span class=\"padl27\"></span>层:</span>第10层(共33层)</dd>"+  
  10.                 "<dd>"+  
  11.                 "    <span class=\"gray6 \">结<span class=\"padl27\"></span>构:</span>平层</dd>"+  
  12.                 "<dd>"+  
  13.                 "    <span class=\"gray6\">装<span class=\"padl27\"></span>修:</span>毛坯</dd>"+  
  14.                 "<dd>"+  
  15.                 "    <span class=\"gray6\">住宅类别:</span>普通住宅</dd>"+  
  16.                 "<dd>"+  
  17.                 "    <span class=\"gray6\">建筑类别:</span>板楼</dd>"+  
  18.                 "<dd>"+  
  19.                 "    <span class=\"gray6 \">产权性质:</span>个人产权</dd>"+  
  20.                 "<dd>"+  
  21.                 "</dl>";  
  22.   
  23.         String regex2 = "<dd.*?>([\\s\\S]*?)</dd>";  
  24.         String regex3 = "<span.*?>住宅类别";  
  25.         Pattern pattern2 = Pattern.compile (regex2);  
  26.         Pattern pattern3 = Pattern.compile (regex3);  
  27.         Matcher match2 = pattern2.matcher (oriStr);  
  28.         Matcher match3 = null;  
  29.         while (match2.find ()){//取的每个dd标签  
  30.             String dd = match2.group ();  
  31.             System.out.println(dd);  
  32.             match3 = pattern3.matcher(dd);  
  33.               
  34.             if(match3.find()){//找到dd中含有住宅列别的span 将没用的替换掉  
  35.                 dd=dd.replaceAll("<dd>""");  
  36.                 dd=dd.replaceAll("</dd>""");  
  37.                 dd=dd.replaceAll("<span.*?</span>""");  
  38.                 System.out.println("\n\n\n\n\n找到啦......"+dd+"\n\n\n\n");  
  39.             }  
  40.         }  
  41.           
  42.     }  

 影音先锋电影 http://www.iskdy.com/



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java,可以使用java.util.regex包的Pattern和Matcher类来实现正则匹配。对于身份证号的正则匹配,可以使用以下代码片段: ``` import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String[] args) { // 身份证一般为18位或者15位,尾数有大写X小写x // 身份证号正则表达式 Pattern idCardPattern = Pattern.compile("\\d{17}[\\d|x|X]|\\d{15}"); Matcher matcher = idCardPattern.matcher("身份证148502147502130123"); if (matcher.find()) { String idCardNumber = matcher.group();//得到身份证号 System.out.println(idCardNumber); } } } ``` 以上代码使用了正则表达式`\\d{17}[\\d|x|X]|\\d{15}`来匹配身份证号码。该正则表达式的含义是:匹配17位数字后跟一个数字或x/X,或者匹配15位数字。如果匹配成功,就可以通过`matcher.group()`方法获取到匹配的身份证号码。在给定的示例,输出结果为"148502147502130123"。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [java正则实现身份证号码匹配](https://blog.csdn.net/qq_34432771/article/details/78206245)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [java利用正则表达式获取文本内容的身份证号码](https://blog.csdn.net/weixin_46909196/article/details/120502901)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [零基础python爬虫48小时速成](https://download.csdn.net/download/weixin_36643308/88220343)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值