删除html的正则表达式没有摆脱img标签

时间:2011-06-14 18:11:43

标签: java html-parsing

我正在使用正则表达式删除HTML标记。我做的事情 -     result.replaceAll(“\<。*?\>”,“”);

然而,它并没有帮助我摆脱html中的img标签。知道什么是这样做的好方法吗?

7 个答案:

答案 0 :(得分:2)

如果你不能使用HTML解析器/清理器,那么我至少会建议你使用Pattern.DOTALL标志来处理多行HTML块。考虑这样的代码:

String str = "123 <img \nsrc='ping.png'>abd foo";
Pattern pt = Pattern.compile("<.*?>", Pattern.DOTALL);
Matcher matcher = pt.matcher(str);
StringBuffer sb = new StringBuffer();
while (matcher.find()) {
    matcher.appendReplacement(sb, "");
}
matcher.appendTail(sb);
System.out.println("Output: " + sb);

输出

Output: 123 abd foo

答案 1 :(得分:1)

要提供更具体的建议,请使用JSoup(或NekoHTML)将HTML解析为Java对象。

获得Document对象后,可以轻松遍历该对象以删除标记。这个cookbook recipe显示了如何从DOM获取属性和文本。

答案 2 :(得分:1)

另一个建议是HtmlCleaner

答案 3 :(得分:0)

使用html解析器。迭代对象,打印你喜欢的并获得最佳效果。

答案 4 :(得分:0)

我只是重复其他人已经说过的内容,但这一点不能过分陈述:不要使用REGEXES PARSE HTML。 SO上有1000个类似的问题。使用正确的HTML解析器,它将使您的生活变得更加轻松,并且更加强大和可靠。看看Dom4j,Jericho,JSoup。请。

答案 5 :(得分:0)

那么,一段代码给你。 我使用http://htmlparser.sourceforge.net/来解析HTML。它并不简单,使用起来非常简单。

基本上它看起来像这样:

import org.htmlparser.Parser;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;

    ...

    String html; /* read your HTML into variable 'html' */
    String result=null;
    ....
    try {
        Parser p = new Parser(html);
        NodeList nodes = p.parse(null);
        result = nodes.asString();
    } catch (ParserException e) {
        e.printStackTrace();
    }

这将为您提供剥离标签的纯文本(但不会修复&amp; amp; 等替代品)。当然,你可以使用这个库做更多的事情,比如应用过滤器,访问者,迭代和所有东西。

答案 6 :(得分:0)

我已经能够使用下面的代码片段来实现这一目标。

String htmlContent = values.get(position).getContentSnippet();
String plainTextContent = htmlContent.replaceAll("<img .*?/>", "");

我使用上面的正则表达式来清理我的RSS内容中的img标签。