2012-08-30 123 views
2

我想從下面的輸入提取「小聯盟世界系列賽」:Java的正則表達式列提取

<li><span class="Spicy new"><a href="http://www.google.com/trends/hottrends#a=20120825-Little%2BLeague%2BWorld%2BSeries">Little League World Series</a></span></li> 

之前,以「後,我可以替換字符串」,或者我可以提取字符串。 我無法得到正確的正則表達式來做到這一點。我用line.replace(" <li><span class=\"[\\w]+\"", "");取代「小聯盟世界大賽」之前的部分,但它不正確。

希望有任何幫助。

+3

你使用正則表達式的任何原因,而不是一個DOM或XML之間那張最後一個非空文解析器? –

+1

,因爲我只是希望術語(其中一個值)更容易使用正則表達式字符串解析,而不是包含額外的庫。 – user441170

回答

0

使用

<li><span class="[^"]+"><a href="[^"]+">[^>]+</a></span></li> 

讓整條生產線。然後用 「替換

<li><span class="[^"]+"><a href="[^"]+"> 

」 和替換

</a></span></li> 

與 「」

嘗試以下link.it還顯示所需的Java字符串。 http://www.regexplanet.com/advanced/java/index.html

對於用Java功能的檢查此鏈接: http://docs.oracle.com/javase/7/docs/api/java/util/regex/Matcher.html#replaceFirst(java.lang.String)

+0

無法使用全字符串匹配,我想匹配從http://www.google.com/trends/hottrends/atom返回的這種格式的多個字符串/ hourly?country = usa – user441170

+0

其實我可以使用line = line.replace(line.substring(line.indexOf(「」)),「」); line = line.replace(line.substring(0,line.lastIndexOf(「>」))+ 1,「」); – user441170

+0

它的黑客,不漂亮,但它爲我的目的。 – user441170

1

您可以使用此把該東東刪除在該行的前面:

line.replaceFirst("<li><span class=\"[^\"]+\"><a href=\"[^\"]+\">", ""); 

試試吧on regexr

編輯:String.replace不接受正則表達式,String.replaceFirst一樣。

+0

在Java代碼中不起作用..不知道爲什麼。 – user441170

+0

Damn,'String.replace'不接受正則表達式,你需要使用'String.replaceFirst'。那麼,這是我得到的只是試圖在正則表達式,我認爲:) – zb226

1

如果這不是一個很好形成信任的HTML源代碼,使用HTML解析器像JSOUP。正則表達式無法保護您免受許多格式錯誤的HTML問題。

0

這一個似傳:

@Test 
    public void patternTest() { 
     final String text = "<li><span class=\"Spicy new\"><a href=\"http://www.google.com/trends/hottrends#a=20120825-Little%2BLeague%2BWorld%2BSeries\">Little League World Series</a></span></li>"; 
     final Pattern pattern = Pattern.compile("^.*>([^<>]+)<.*$"); 
     final Matcher matcher = pattern.matcher(text); 
     assertTrue(matcher.matches()); 
     assertEquals("Little League World Series", matcher.group(1)); 
    } 

它提取的是「>」和「<」