使用Java正则表达式移除HTML文件中的二进制数据
用Java正则移除HTML中的二进制数据标签内容
没问题,我来帮你搞定这个需求。先看你的示例,二进制数据是包裹在<TEXT>标签里,以begin 644开头、end结尾的整块内容。我们可以用正则精准定位并移除这个块,同时保留正常的文本<TEXT>标签。
第一步:构建精准匹配的正则表达式
我们需要匹配的是包含base64格式二进制数据的<TEXT>标签块,对应的正则字符串是:
"<TEXT>\\s*begin 644.*?end\\s*</TEXT>"
这里几个关键细节要注意:
\\s*:用来匹配begin 644前后、end前后的空白或换行,避免因为格式问题匹配失败.*?:用非贪婪模式匹配任意字符,这样只会匹配到第一个end对应的<TEXT>块,不会误吞后面正常的文本标签- 必须启用
Pattern.DOTALL模式,让.能匹配换行符——毕竟二进制数据是多行的,没有这个模式正则跨不了行
第二步:Java代码实现示例
下面是完整的可运行代码,直接就能用:
import java.util.regex.Matcher; import java.util.regex.Pattern; public class BinaryHtmlCleaner { public static void main(String[] args) { // 替换成你的实际HTML内容 String rawHtml = "<HTML> <BODY STYLE=\"font: 10pt Times New Roman, Times, Serif\"> <TEXT> begin 644 image_002.jpg M_]C_X 02D9)1@ ! 0 0 ! #_VP!# @&!@<&!0@'!P<)\"0@*#!0-# L+ M#!D2$P\\4'1H?'AT:'!P@)\"XG(\"(L(QP<*#<I+# Q-#0T'R<Y/3@R/\"XS-#+_ MVP!# 0D)\"0P+#!@-#1@R(1PA,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R ,Z4]1]: %HHHIB/_9 end </TEXT> <TEXT>losses occurring in the third quarter and from weather </TEXT> </BODY>"; // 编译正则,启用DOTALL模式 Pattern binaryPattern = Pattern.compile("<TEXT>\\s*begin 644.*?end\\s*</TEXT>", Pattern.DOTALL); Matcher matcher = binaryPattern.matcher(rawHtml); // 移除匹配到的二进制块 String cleanedHtml = matcher.replaceAll(""); // 输出清理后的结果 System.out.println(cleanedHtml); } }
代码逻辑说明
Pattern.DOTALL:核心配置,没有它的话,正则里的.只能匹配单行字符,根本抓不到多行的二进制数据- 非贪婪匹配
.*?:防止正则“贪心”地从第一个<TEXT>一直匹配到最后一个</TEXT>,确保只移除包含二进制的那个标签块 - 替换为空字符串:直接把整个包含二进制的
<TEXT>块删掉,如果你想保留<TEXT>标签但清空内容,把replaceAll("")改成replaceAll("<TEXT></TEXT>")就行
运行结果
执行代码后,输出的清理后HTML会是:
<HTML> <BODY STYLE="font: 10pt Times New Roman, Times, Serif"> <TEXT>losses occurring in the third quarter and from weather </TEXT> </BODY>
完全保留了正常的文本内容,二进制数据块被彻底移除。
内容的提问来源于stack exchange,提问作者Sky
相关产品推荐
相关产品推荐

