如何在Java中删除HTML标记

fre*_*ara 14 html java regex

是否有可以完全删除HTML标记的正则表达式?顺便说一下,我正在使用Java.

小智 22

JSoup这是HTML操作做一个Java库.看一下clean()方法和WhiteList对象.易于使用的解决方案!

  • 更短的代码是`String plaintext = Jsoup.parse(html).text();` (4认同)
  • @jrarama - 完全没有.`Jsoup.parse(html).text()`删除所有的标签和空格,只留下一条很长的单行文本,而`new HtmlToPlainText().getPlainText(Jsoup.parse(html))`格式化文字以简单的方式,保持换行符,段落,项目符号等. (3认同)
  • 哇,你先生,真的让我的一天,我喜欢,是的!Markdownj,Markdown4J,htmlCleaner ..所有这些都是*****抱歉.. JSoup是唯一一个你真正用单行实现的地方:String plain = new HtmlToPlainText().getPlainText(Jsoup.parse( HTML)); (2认同)

tan*_*ens 20

您应该使用HTML解析器.我喜欢htmlCleaner,因为它给了我一个漂亮的HTML版本.

使用htmlCleaner,您可以:

TagNode root = htmlCleaner.clean( stream );
Object[] found = root.evaluateXPath( "//div[id='something']" );
if( found.length > 0 && found instanceof TagNode ) {
    ((TagNode)found[0]).removeFromTree();
}
Run Code Online (Sandbox Code Playgroud)


And*_*ich 5

如果您只需要删除标签,那么您可以使用此正则表达式:

content = content.replaceAll("<[^>]+>", "");
Run Code Online (Sandbox Code Playgroud)

它只会删除标签,而不会删除其他HTML内容.对于更复杂的事情,您应该使用解析器.

编辑:为避免HTML注释出现问题,您可以执行以下操作:

content = content.replaceAll("<!--.*?-->", "").replaceAll("<[^>]+>", "");
Run Code Online (Sandbox Code Playgroud)