2017-03-03 75 views
1

我有一个大的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(); 
    } 
+1

正则表达式外观结尾处的''/ g''这是错的。删除它,然后重试。 – f1sh

+1

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 –

+0

@ f1sh即使我删除/ g,它也不起作用。我在此之前尝试过。 – Nevermore

回答

1

这个答案已完成。 当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> 
+0

它不工作使用您建议的正则表达式。 – Nevermore

+1

测试用例添加,它的工作。 – Aubin

+0

它是一个精确的测试案例。但是,如果是跨环标签。它失败。 – Nevermore