我正在使用正则表达式删除HTML标记。我做的事情 - result.replaceAll(“\<。*?\>”,“”);
然而,它并没有帮助我摆脱html中的img标签。知道什么是这样做的好方法吗?
答案 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标签。