如何使用Java从html中删除特定标记?

时间:2017-03-03 14:29:22

标签: java html regex

我有一个大的HTML。我想删除一个特定的span标签,它可以很简单。

<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>

或任何其他混合格式。但是,它应该保留......之间的文本。

实际的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();
    } 

2 个答案:

答案 0 :(得分:2)

基于RegEx match open tags except XHTML self-contained tags(感谢@Maurice Perry的评论)

我建议您使用jsoup,如下所示:Parse html with jsoup and remove the tag block

答案 1 :(得分:1)

这个答案是在实际html 添加到问题之前完成的。 当RegEx可能解决词汇问题时,JSoup解决了语法问题。因此,对于这个问题,使用JSoup是唯一的方法。

但是,这个答案可能有助于RegEx用户:

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>