2016-12-07 128 views
0

我試圖在JAVA中的標籤之間獲取文本。正則表達式在標籤之間獲取文本

`

<td colspan="2" style="font-weight:bold;">HELLO TOTO</td> 
<td>Function :</td> 

`

我想用正則表達式來提取 「HELLO TOTO」,而不是 「功能:」

我已經嘗試過這樣的事情

`

String btwTags = "<td colspan=\"2\" style=\"font-weight:bold;\">HELLO TOTO</td>\n" + "<td>Function :</td>"; 
     Pattern pattern = Pattern.compile("<td(.*?)>(.*?)</td>"); 
     Matcher matcher = pattern.matcher(btwTags); 
     while (matcher.find()) { 
      String group = matcher.group(); 
      System.out.println(group); 
     } 

`

但結果與輸入相同。 任何想法?

我想這正則表達式(?<=<td>)(.*?)(?=</td>)太多,但它唯一的缺點「功能:」 我不知道的設置,他可能是開放<td ...>

由於已經經過一些提前

+0

源XHTML?如果是這樣,我會使用XML解析器和XPATH。 – Roger

+0

嘗試Jsoup庫,請在下面找到鏈接 https://jsoup.org/ –

+0

使用組(2);以獲取標籤內的內容 – Aelop

回答

1

別T選用正則表達式解析HTML,它是一個非常糟糕的主意......

知道爲什麼檢查此鏈接: RegEx match open tags except XHTML self-contained tags

可以使用Jsoup實現這一目標:

String html; // your html code 
Document doc = Jsoup.parse(html); 
System.out.println(doc.select("td[colspan=2]").text()); 
+1

這個鏈接,再次。使用正則表達式並不總是一個壞主意,就像Jsoup並不總是正確的答案。如果您的HTML已損壞,例如如果使用非封閉標籤,解析器可能會窒息。 –

+1

@EricDuminil在這裏,我們假設HTML格式良好,(否則不會是HTML)。你也可以花幾個小時創建一個完美的正則表達式,這可能與某些輸入示例有關。 – nafas

+0

如果你從網上的某個地方下載HTML,你實際上需要假設它沒有形成。 –

0

您可以使用正則表達式非常基本的HTML解析。這裏是我可以找到的最簡單的Java正則表達式:

"(?i)<td[^>]+>([^<]+)<\\/td>" 

它匹配第一個td標籤的屬性和值。 "HELLO TOTO"在組1中。

這裏是一個example

對於任何更復雜的事情,像Jsoup這樣的解析器會更好。 但是即使解析器可能會失敗,如果HTML無效或您編寫代碼的結構已被更改。

+0

*「如果您編寫代碼的結構已被更改」*然後解析器不會失敗,但您確實是:)另外「失敗」是相對的。拋出一個例外「失敗」? – m0skit0

+0

@ m0skit0:我的意思是說HTML可能是由其他人編寫的,整個HTML結構可能會被更改,恕不另行通知。 –

+0

我仍然沒有看到與「解析器vs正則表達式」問題有什麼關係。 – m0skit0

-1

我我只是用分割功能界定在給定的子.Regex很慢,經常混淆提供的解決方案,而無需使用正則表達式希望這將是有益的..

public class Solution{ 
    public static void main(String ...args){ 
    String str = "<td colspan=\"2\" style=\"font-weight:bold;\">HELLO TOTO</td><td>Function :</td>"; 
    String [] garray = str.split(">|</td>"); 
    for(int i = 1;i < garray.length;i+=2){ 
     System.out.println(garray[i]); 
    } 
    } 
} 


Output :: HELLO TOTO    
      Function : 

歡呼快樂編碼...

+0

那麼爲什麼不使用C!不要使用Java,它很慢並且經常令人困惑。 – m0skit0

+1

['String#split(String regex)'](https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#split-java.lang.String-):「將該字符串拆分爲給定的**正則表達式**的匹配項。「 – xehpuk

相關問題