[英]How to remove a specific tag from html using Java?
我有一个大的HTML。 我想删除一个特定的span标签,它可以很简单。
<span class=GramE> blah blah blah</span>
Output: bla bla bla
要么
<span class=a><span class=GramE>bla bla bla</span></span>
Output: <span class=a>bla bla bla</span>
或者以任何其他混合格式。 但是,它应该保留...之间的文本
实际的HTML
<td width=265 colspan=3 valign=top style='width:7.0cm;background:white;
padding:0cm 5.75pt 0cm 5.75pt'> <p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;text-align:justify;line-height:normal'><span class=GramE><span style='font-size:13.0pt'>(Here</span></span><span style='font-size:13.0pt'> Lorem ispsum. Lorem ispsum. Lorem ispsum. Lorem ispsum )</span></p>
</td>
我尝试了以下代码,但replaceAll()似乎没有用。 我的html文本中有许多混合的span-tags需要这个输出。 请帮我弄清楚我哪里出错了。
String filename = "file-location.html";
try (BufferedReader br = new BufferedReader(new FileReader(filename))) {
String line;
String sb = "";
while ((line = br.readLine()) != null) {
String tmp = line.replaceAll("<span class=GramE[^>]*>/g", "");
System.out.print(tmp);
}
} catch (IOException e) {
e.printStackTrace();
}
基于RegEx匹配开放标签,除了XHTML自包含标签 (感谢@Maurice Perry的评论)
我建议你使用jsoup
,如下所示: 用jsoup解析html并删除标记块
这个答案是在将实际的html添加到问题之前完成的。 当RegEx可能解决词汇问题时,JSoup解决了语法问题。 因此,对于这个问题,使用JSoup是唯一的方法。
但是,这个答案可能有助于RegEx用户:
line.replaceAll("<span class=GramE>([^<]*)</span>", "$1" );
([^<]*)
是一个捕获组, $1
是它的值。
看文档 。
测试用例:
public class RemoveTagFromPage {
public static void main( String[] args ) {
final String text =
"<html><body>" +
"<p>hello</p>" +
"<span class=a>" +
"<span class=GramE>bla bla bla</span>" +
"</span>" +
"</body></html>";
System.out.println(
text.replaceAll("<span class=GramE>([^<]*)</span>", "$1" ));
}
}
执行日志:
<html><body><p>hello</p><span class=a>bla bla bla</span></body></html>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.