场景:公司框架有一个前台导出功能,实际上是把HTML结构通过正则去掉一些没用的样式,然后由统一的工具导出。

但是不支持列表为下拉的样式,比如这种:

观察了工具:是这样的

<%@page contentType="text/html;charset=GB2312"%>
<%@ page import="java.util.regex.*" %>
<jsp:useBean id="xml" scope="session" class="com.nstc.exportkit.excel.ExportExcel"/><%String name=(String)request.getParameter("fileName");String fileName=name + ".xls";if(name!=null&&!"".equals(name)){fileName=java.net.URLEncoder.encode(name+".xls", "utf-8");}System.out.println("导出文件名称:"+fileName);response.reset();response.setContentType( "application/vnd.ms-excel;charset=GB2312");response.setHeader("Content-disposition","attachment; filename=\"" + fileName + "\"");String table = request.getParameter("_ExcelText_");//bos.write(table);//bos.close();if(table.indexOf("</THEAD>")>0 ){String regex ="(<THEAD.*?>)";String regex1 ="(</THEAD>)|(<TBODY.*?>)";Pattern p1 = Pattern.compile(regex1,Pattern.CASE_INSENSITIVE);Matcher m1 = p1.matcher(table);String res1= m1.replaceAll("");Pattern p = Pattern.compile(regex,Pattern.CASE_INSENSITIVE);Matcher m = p.matcher(res1);String res= m.replaceAll("<TBODY>");String regex2 = "<BR>";Pattern p2 = Pattern.compile(regex2,Pattern.CASE_INSENSITIVE);Matcher m2 = p2.matcher(res);String res2 = m2.replaceAll("");String regex3 = "<INPUT.*?>";Pattern p3 = Pattern.compile(regex3,Pattern.CASE_INSENSITIVE);Matcher m3 = p3.matcher(res2);String res3 = m3.replaceAll("");String regex4 = "<SCRIPT LANGUAGE=.*?</SCRIPT>";Pattern p4 = Pattern.compile(regex4,Pattern.CASE_INSENSITIVE);Matcher m4 = p4.matcher(res3);String res4 = m4.replaceAll("");String regex5 = "<TABLE.*?>";Pattern p5 = Pattern.compile(regex5,Pattern.CASE_INSENSITIVE);Matcher m5 = p5.matcher(res4);String res5 = m5.replaceAll("<TABLE>");/*int i = res5.indexOf("<TR style=\"DISPLAY: none\"");String res14 = "";if(i>0){res14 = res5.substring(0, i);res14 += "</TBODY></TABLE>";}else{res14 = res5;}*/String regex14 = "<TR[^>]*?style=\"DISPLAY: none\"[\\s\\S]*?>[\\s\\S]*?</TR>";Pattern p14 = Pattern.compile(regex14,Pattern.CASE_INSENSITIVE);Matcher m14 = p14.matcher(res5);String res14 = m14.replaceAll("");String regex13 = "<TD[^>]*?style=\"DISPLAY: none\"[\\s\\S]*?>[\\s\\S]*?</TD>";Pattern p13 = Pattern.compile(regex13,Pattern.CASE_INSENSITIVE);Matcher m13 = p13.matcher(res14);String res13 = m13.replaceAll("");String regex7 = "<TR.*?>";Pattern p7 = Pattern.compile(regex7,Pattern.CASE_INSENSITIVE);Matcher m7 = p7.matcher(res13);String res7 = m7.replaceAll("<TR>");String regex8 = "<SPAN.*?>";Pattern p8 = Pattern.compile(regex8,Pattern.CASE_INSENSITIVE);Matcher m8 = p8.matcher(res7);String res8 = m8.replaceAll("");String regex9 = "</SPAN>";Pattern p9 = Pattern.compile(regex9,Pattern.CASE_INSENSITIVE);Matcher m9 = p9.matcher(res8);String res9 = m9.replaceAll("");String regex10 = "<LABEL.*?>";Pattern p10 = Pattern.compile(regex10,Pattern.CASE_INSENSITIVE);Matcher m10 = p10.matcher(res9);String res10 = m10.replaceAll("");String regex11 = "</LABEL>";Pattern p11 = Pattern.compile(regex11,Pattern.CASE_INSENSITIVE);Matcher m11 = p11.matcher(res10);String res11 = m11.replaceAll("");/*String regex12 = "(?i)<select.*?>.*?<option.*?selected=\"selected\".*?>(.*?)</option>.*?</select>";Pattern p12 = Pattern.compile(regex12,Pattern.CASE_INSENSITIVE);Matcher m12 = p12.matcher(res11);String res12 = m12.replaceAll("$1");*/System.out.println(res11);xml.export(res11,response.getOutputStream());} else {String regex2 = "<BR>";Pattern p2 = Pattern.compile(regex2,Pattern.CASE_INSENSITIVE);Matcher m2 = p2.matcher(table);String res2 = m2.replaceAll("");String regex3 ="(<FONT.*?>)";Pattern p3 = Pattern.compile(regex3,Pattern.CASE_INSENSITIVE);Matcher m3 = p3.matcher(res2);String res3= m3.replaceAll("");String regex4 ="(</FONT>)";Pattern p4 = Pattern.compile(regex4,Pattern.CASE_INSENSITIVE);Matcher m4 = p4.matcher(res3);String res4= m4.replaceAll("");String regex5 = "<INPUT.*?>";Pattern p5 = Pattern.compile(regex5,Pattern.CASE_INSENSITIVE);Matcher m5 = p5.matcher(res4);String res5 = m5.replaceAll("");String regex6 = "<SCRIPT LANGUAGE=(.|\n|\r)*?</SCRIPT>";Pattern p6 = Pattern.compile(regex6,Pattern.CASE_INSENSITIVE);Matcher m6 = p6.matcher(res5);String res6 = m6.replaceAll("");String regex7 = "<TD[^>]*?style=\"DISPLAY: none\"[\\s\\S]*?>[\\s\\S]*?</TD>";Pattern p7 = Pattern.compile(regex7,Pattern.CASE_INSENSITIVE);Matcher m7 = p7.matcher(res6);String res7 = m7.replaceAll("");String regex14 = "<TR[^>]*?style=\"DISPLAY: none\"[\\s\\S]*?>[\\s\\S]*?</TR>";Pattern p14 = Pattern.compile(regex14,Pattern.CASE_INSENSITIVE);Matcher m14 = p14.matcher(res7);String res14 = m14.replaceAll("");String regex9 = "<tr.*?>";Pattern p9 = Pattern.compile(regex9,Pattern.CASE_INSENSITIVE);Matcher m9 = p9.matcher(res14);String res9 = m9.replaceAll("<TR>");System.out.println(res9);String regex12 = "(?i)<select.*?>.*?<option.*?selected=\"selected\".*?>(.*?)</option>.*?</select>";Pattern p12 = Pattern.compile(regex12,Pattern.CASE_INSENSITIVE);Matcher m12 = p12.matcher(res9);String res12 = m12.replaceAll("$1");xml.export(res12,response.getOutputStream());}%>

只需要加上获取option里面数据的正则就可以了。注意使用非贪婪匹配和$1占位符

        String str = "<LABEL>是否需清理</LABEL></TH><TH colSpan=\"1\" rowSpan=\"1\" class=\"table_bg text-center\"  style=\"word-break: keep-all; width: 149px; height: 30px;\"><LABEL>反馈结果</LABEL></TH><TH colSpan=\"1\" rowSpan=\"1\" class=\"table_bg text-center\"  style=\"word-break: keep-all; width: 150px; height: 30px;\"><LABEL>不处理原因</LABEL></TH><TH colSpan=\"1\" rowSpan=\"1\" class=\"table_bg text-center\"  style=\"word-break: keep-all; width: 90px; height: 30px;\"><LABEL>反馈日期</LABEL></TH></TR></THEAD><TBODY><TR><TD colSpan=\"1\"rowSpan=\"1\" class=\"\" align=\"center\" valign=\"middle\"  style=\"vertical-align:middle;padding:0 5px 0 5px;\"></TD><TD colSpan=\"1\" rowSpan=\"1\" class=\"\" align=\"left\" valign=\"middle\"  style=\"vertical-align:middle;padding:0 5px 0 5px;\">01001003_01</TD><TD colSpan=\"1\" rowSpan=\"1\" class=\"\" align=\"left\" valign=\"middle\"  style=\"vertical-align:middle;padding:0 5px 0 5px;\">3333333310000</TD><TD colSpan=\"1\" rowSpan=\"1\" class=\"\" align=\"left\" valign=\"middle\"  style=\"vertical-align:middle;padding:0 5px 0 5px;\">四川电力公司</TD><TD colSpan=\"1\" rowSpan=\"1\" class=\"\" align=\"left\" valign=\"middle\"  style=\"vertical-align:middle;padding:0 5px 0 5px;\"></TD><TD colSpan=\"1\" rowSpan=\"1\" class=\"\" align=\"left\" valign=\"middle\"  style=\"vertical-align:middle;padding:0 5px 0 5px;\">旧单位21</TD><TD colSpan=\"1\" rowSpan=\"1\" class=\"\" align=\"left\" valign=\"middle\"  style=\"vertical-align:middle;padding:0 5px 0 5px;\">中国工商银行</TD><TD colSpan=\"1\" rowSpan=\"1\" class=\"\" align=\"left\" valign=\"middle\"  style=\"vertical-align:middle;padding:0 5px 0 5px;\">基本账户</TD><TD colSpan=\"1\" rowSpan=\"1\" class=\"\" align=\"left\" valign=\"middle\"  style=\"vertical-align:middle;padding:0 5px 0 5px;\">一般户</TD><TD colSpan=\"1\" rowSpan=\"1\" class=\"\"align=\"left\" valign=\"middle\"  style=\"vertical-align:middle;padding:0 5px 0 5px;\">非直联</TD><TD colSpan=\"1\" rowSpan=\"1\"class=\"\" align=\"left\" valign=\"middle\"  style=\"vertical-align:middle;padding:0 5px 0 5px;\">正常</TD><TD colSpan=\"1\" rowSpan=\"1\" class=\"\" align=\"left\" valign=\"middle\"  style=\"vertical-align:middle;padding:0 5px 0 5px;\">999.99</TD><TD colSpan=\"1\" rowSpan=\"1\" class=\"\" align=\"left\" valign=\"middle\"  style=\"vertical-align:middle;padding:0 5px 0 5px;\">2020-03-04</TD><TD colSpan=\"1\" rowSpan=\"1\" class=\"\" align=\"left\" valign=\"middle\"  style=\"vertical-align:middle;padding:0 5px 0 5px;\">";//list.set(i,line.replaceAll("\\sextends\\s+\\w+(?=(\\s+implements\\s+\\w+)?\\s?\\{)",""));String reg = "<select.*?>.*?<option.*?selected=\"selected\".*?>(.*?)</option>.*?</select>";System.out.println(str.replaceAll(reg,"$1"));

正则只保留括号里的内容相关推荐

  1. python花括号怎么取_Python如何正则提取第三层花括号()里的内容?

    举例:我想把如下字符串中第三层花括号的内容提取出来{supportedBandCombination-r10{{{bandEUTRA-r103,bandParametersUL-r10{{ca-Ban ...

  2. php获取括号中的内容,PHP实现正则匹配所有括号中的内容

    PHP实现正则匹配所有括号中的内容 正则表达式:(?<=[)[^]]+ 注:以匹配中文括号中内容为例,如果匹配非中文括号,则需要在括号前增加转义符 PHP实现示例: $strSubject = ...

  3. php 匹配括号的个数,php 正则匹配括号内容 PHP实现正则匹配所有括号中的内容

    正则表达式:(?<=[)[^]]+ 注:以匹配中文括号中内容为例,如果匹配非中文括号,则需要在括号前增加转义符 PHP实现示例: $strSubject = "abc[111]abc[ ...

  4. php 正则 括号内容_PHP怎么实现正则匹配所有括号中的内容

    PHP实现正则匹配所有括号中的内容的方法:首先创建一个PHP文件:然后输入PHP正则匹配代码,如:"preg_match_all($strPattern, $strSubject, $arr ...

  5. Java正则获取小括号中的内容_java正则表达式获取大括号小括号内容并判断数字和小数亲测可用...

    获取大括号小括号内容 项目开发用到了,暂做个简单记录 private static String regex = "\\{([^}]*)\\}";//匹配大括号 private s ...

  6. wps如何删除括号里的内容_文档中怎么批量去除括号里面的答案 - 卡饭网

    在word2007文档中如何批量删除英文字母? 在word2007文档中如何批量删除英文字母? 在word2007文档中如何批量删除英文字母?          步骤 1.点击office word2 ...

  7. [转]element-ui输入框(el-input)前缀图标和后缀图标(转载请删除括号里的内容)

    el-input是element-ui中的一个组件,在element-ui中文手册中有详细的介绍.其中,带 icon 的输入框示例如下: 对应的代码是: <div class="dem ...

  8. [转]前端开发必备神级资源(转载请删除括号里的内容)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/weixin_43606158/arti ...

  9. python提取字符串括号里的内容

    import reresult_list = re.findall(r"[(](.*?)[)]", "(123)")print(result_list [0]) ...

最新文章

  1. 邻接矩阵中啥时候写0和无穷_集合中的上极限与下极限
  2. 计算机组成原理 输入输出系统,计算机组成原理(第七章输入输出系统
  3. Shell脚本个例二
  4. 1354. 等差数列【一般 / 暴力枚举】
  5. 第二课--字符串类型及操作
  6. Ubuntu常用服务器环境搭建——MySQL篇
  7. java取模运算_Java的四则运算符与取模运算符
  8. 读取swagger配置文件里的内容
  9. Python入门--元组的创建,(),tuple()
  10. [转载] Python 字典删除元素clear、pop、popitem
  11. linux客户端 手机,WAPI客户端在Linux系统中的实现
  12. PLC编程实例(一) 基本电路
  13. multisim变压器反馈式_基于Multisim 负反馈放大电路的仿真实验分析
  14. 泛克里金方法的实际应用——小试牛刀
  15. 葵花宝典第一招:唐氏均线成交量参数
  16. 【毕业设计】基于Arduino的智能灌溉系统 - 嵌入式 单片机 物联网
  17. 一网打尽win10 Google Chrome浏览器打开后默认 桔梗 页面
  18. Linux就这个范儿 第13章 打通任督二脉
  19. 读松下幸之助自传有感
  20. 一个关于SDWAN单臂部署方案验证的实验

热门文章

  1. 个人永久性免费-Excel催化剂功能第83波-遍历文件夹内文件信息特别是图像、音视频等特有信息...
  2. 关于NX/UG使用KF二次开发的常用方法
  3. 北大计算机学霸,揭秘:2018北大在京录取的学霸们有何特长(组图)
  4. cym : BaseQuickAdapter.setOnItemChildClickListener失效点击没反应
  5. ubuntu命令行使用wget下载百度云资源
  6. 解决ImportError: sys.meta_path is None, Python is likely shutting down.问题
  7. HTML基础知识点总结三
  8. docker安全配置(cpu、分区的大小设定和权限设定)
  9. 标题、首图、详情页:三位一体的搜索优化技巧
  10. Android游戏集成豌豆荚支付