2012-08-30 85 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)); 
    } 

它提取的是“>”和“<”