如何从匹配模式的String中提取匹配的子字符串?

时间:2013-06-21 10:42:12

标签: java

我正在读取以下任一模式的字符串:

^<.*>.*</td>$
^<.*><.*>.*</a></td>$

Eamples:

<td nowrap valign="top" class="style1">Manhattan</td>
<td nowrap valign="top" class="style1"><a>New York</a></td>

我想阅读ManhattanNew York

如何在同一个程序中编写2个Pattern.complie()方法? Matches()总是为我的输入行返回true,但在那之后如何进行子串操作来提取ManhattanNew York?任何建议都会有很大的帮助。感谢。

5 个答案:

答案 0 :(得分:1)

使用正则表达式,如:

final Pattern pattern = Pattern.compile("<td>(.+?)</td>");

答案 1 :(得分:1)

你应该使用GROUPS。

^<.*>.*</td>$更改为^<.*>(?<name>.*)</td>$

匹配()之后

返回true,您可以提取名称matcher.group("name")(返回带有您姓名的字符串)。

修改 感谢伊恩。

在java7之前

你必须做matcher.group(1)。组0将为您提供匹配的整个字符串。

答案 2 :(得分:0)

String stem[] = "<td nowrap valign='top' class='style1'>Manhattan</td>".split(">");

String stem1[] = stemp[1].split("<");

System.out.println(stemp[0]);

这是你想要的吗?

答案 3 :(得分:0)

试试这个..

public class tag {
public static void main(String[] args) {
    String inputString="<td nowrap valign=top class=style1>Manhattan</td>"
                      +"<td nowrap valign=top class=style1><a>New York</a></td>";

       String noHTMLString = inputString.replaceAll("\\<.*?>","");
       System.out.println(""+noHTMLString);
}

}

答案 4 :(得分:0)

当你使用框架时,它更容易...... Selenium Webdriver的例子来自我的头脑:

List<WebElement> elems = wd.getElements(By.class("class1"));
  • Selenium Webdriver
  • 的HtmlUnit