当前位置: 首页 > 知识库问答 >
问题:

java - Java 如何删除未闭合(不完整)标签?

曹鸿风
2023-07-12

如题,如果想用Java处理一段带有html标签的字符串。
要求:
①如果只存在后半部分标签,不存在前半部分标签,就将后半部分标签删除。
②如果只存在前半部分标签,不存在后半部分标签,就将前半部分标签删除。

例如下面这段:

<u style=\"color: blue;\">寒雨</u><u style=\"color: red;\">连江</u>夜入<u style=\"color: blue;\">吴</u>,<br><u style=\"color: blue;\">平明送<u style=\"color: red;\">客</u>楚山<u style=\"color: blue;\">孤</u>。<br>洛阳</u>亲友如相问,<br>一片<u style=\"color: blue;\">冰心</u>在<u style=\"color: blue;\">玉壶</u>。

平明后的</u> 标签被我故意删除了;洛阳前的<u>标签被我故意删除了。

有什么办法可以删除这些不完整的标签,最好还能保留标签内容的?
不是提取标签内容,是将不完整的标签删除。

共有1个答案

傅自明
2023-07-12

用JRegex删除未闭合标签:

import jregex.*;

public class Main {
    public static void main(String[] args) {
        String html = "<u style=\"color: blue;\">寒雨</u><u style=\"color: red;\">连江</u>夜入<u style=\"color: blue;\">吴</u>,<br><u style=\"color: blue;\">平明送<u style=\"color: red;\">客</u>楚山<u style=\"color: blue;\">孤</u>。<br>洛阳</u>亲友如相问,<br>一片<u style=\"color: blue;\">冰心</u>在<u style=\"color: blue;\">玉壶</u>。";
        String cleaned = cleanHtml(html);
        System.out.println(cleaned);
    }

    public static String cleanHtml(String html) {
        String pattern = "<(\\w+)(?:[^>]*)>(?:(?>[^<]+)|<(?!\\1>)|(?R))*</\\1>|<\\w+[^>]*/?>";
        Pattern p = new Pattern(pattern, Pattern.RECURSIVE);
        Replacer r = p.replacer("");
        return r.replace(html);
    }
}
 类似资料:
  • 试图刮此网站网址使用urllib2,机械化和美丽汤。当通过浏览器呈现并使用FireBug查看时,我们可以看到带有类progress__supporters和progress_goal的div标签,如下所示。 但是当我们使用urllib2时。打开/mechanize/selenium以查看网页,这些标签不可用。下面是示例代码 我们使用上述代码获得以下输出。 一个原因可能是因为类为“progress\

  • 问题内容: 这个问题已经在这里有了答案 : 从字符串中删除HTML标签 (31个答案) 4年前关闭。 是否存在可以完全删除HTML标签的正则表达式?顺便说一句,我正在使用Java。 问题答案: 您应该改用HTML解析器。我喜欢htmlCleaner,因为它为我提供了漂亮的HTML打印版本。 使用htmlCleaner,您可以执行以下操作:

  • 我使用spring Boot2、jpa和Hibernate。Db是后置,我尝试删除一个带有子级的对象 如果我删除了Samplings,Samplings、testsamplings和Compressions也应该被删除。 从sample_letter=?的示例中删除和sampling_id=?和sampling_year=? 2018-10-03 22:21:05.832错误14511--[nio

  • 用Java构建完整未来的最佳方式是什么?我已经实现了我自己的下面的< code>CompletedFuture,但希望像这样的东西已经存在。

  • 我在Java有一个集合数组列表。 例如,当我这样做时: 测试是集合。 为什么我得到的结果是:[jamesbond] 我只想要jamesbond,但为什么他们也给我[]?

  • 问题内容: 我有一个xml,如下所示: 现在,我想删除标记,但在此处保留内容“ ABCD”。或者有没有一种方法可以使用java从整个XML文件中删除。请帮忙。谢谢。 问题答案: 使用DOM4J或SAX解析器解析文档 从标签中获取价值 从值中删除所有html标签 JSoup三通 字符串替换 将新值设置为XML字体标签