2

我想从下面的输入中提取“Little League World Series”:

<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]+\"", "");用来替换“Little League World Series”之前的零件,但匹配不正确。

将不胜感激任何帮助。

4

4 回答 4

1

您可以使用它来删除行前的内容:

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

在正则表达式上试试

编辑: String.replace不接受正则表达式,String.replaceFirst可以。

于 2012-08-30T18:45:43.597 回答
1

如果这不是格式良好的受信任 html 源,请使用 html 解析器,如 JSOUP。正则表达式无法保护您免受许多格式错误的 html 问题。

于 2012-08-30T18:49:47.360 回答
0

利用

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

得到整条线。然后更换

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

用“”替换

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

和 ””

试试下面的链接。它还显示了所需的 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)

于 2012-08-30T18:48:33.607 回答
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));
    }

它提取介于“>”和“<”之间的最后一个非空文本

于 2012-08-30T19:03:43.380 回答