如何使用Java从html中删除特定标签?
问题描述:
我有一个大的html。我想删除一个可以直接显示的特定span标签。如何使用Java从html中删除特定标签?
<span class=GramE> blah blah blah</span>
Output: bla bla bla
OR
<span class=a><span class=GramE>bla bla bla</span></span>
Output: <span class=a>bla bla bla</span>
或以任何其他形式的混合体。但是,应该保留
<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>
我已经试过但下面的代码
实际的HTML之间...文本,该的replaceAll()似乎没有工作。我的html文本中有很多混合的span标签需要输出。请帮我弄清楚我哪里错了。以前实际的HTML被添加到问题
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可能解决词汇问题时,JSoup解决语法问题。所以,对于这个问题,使用JSoup是唯一的方法。
然而,这个答案可以帮助用户正则表达式:
line.replaceAll("<span class=GramE>([^<]*)</span>", "$1");
([^<]*)
是捕获组和$1
是它的价值。
请参阅documentation。
测试用例:
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>
答
基于RegEx match open tags except XHTML self-contained tags(感谢@Maurice佩里的评论)
我建议你使用jsoup
,如下显示: Parse html with jsoup and remove the tag block
+0
好主意。我会尽快尝试。希望它有效。但是,我正在考虑使用正则表达式轻松工作 – Nevermore
正则表达式外观结尾处的''/ g''这是错的。删除它,然后重试。 – f1sh
http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 –
@ f1sh即使我删除/ g,它也不起作用。我在此之前尝试过。 – Nevermore