java正则表达式:分隔符后提取文本?

时间:2012-10-12 13:20:02

标签: java regex

我是Java中正则表达式的新手。我喜欢使用正则表达式提取字符串。

这是我的字符串:“Hello,World”

我喜欢在“,”之后提取文本。结果将是“世界”。我试过这个:

final Pattern pattern = Pattern.compile(",(.+?)"); 
final Matcher matcher = pattern.matcher("Hello,World"); 
matcher.find(); 

但是下一步会是什么?

4 个答案:

答案 0 :(得分:3)

你不需要Regex。您可以简单地在逗号上拆分并从数组中获取第二个元素: -

System.out.println("Hello,World".split(",")[1]);

输出: -

World

但是如果您想使用Regex ,则需要从正则表达式中删除?

?用于+匹配后的

Reluctant。它将仅匹配W 并停在那里。 你不需要这里。你需要匹配,直到它匹配。

请改用 greedy 匹配。

以下是修改后的正则表达式的代码: -

final Pattern pattern = Pattern.compile(",(.+)"); 
final Matcher matcher = pattern.matcher("Hello,World"); 

if (matcher.find()) {
    System.out.println(matcher.group(1));
}

输出: -

World

答案 1 :(得分:1)

扩展您拥有的内容,您需要从模式中删除符号以使用贪婪匹配,然后处理匹配的组:

final Pattern pattern = Pattern.compile(",(.+)");       // removed your '?'
final Matcher matcher = pattern.matcher("Hello,World"); 

while (matcher.find()) {

    String result = matcher.group(1);

    // work with result

}

其他答案提出了解决问题的不同方法,可能会为您提供更好的解决方案。

答案 2 :(得分:0)

System.out.println( "Hello,World".replaceAll(".*,(.*)","$1") ); // output is "World"

答案 3 :(得分:0)

您使用的是一个不情愿的表达式,只会选择一个字符W,而您可以使用贪心一个并打印匹配的组内容:

final Pattern pattern = Pattern.compile(",(.+)");
final Matcher matcher = pattern.matcher("Hello,World");
if (matcher.find()) {
   System.out.println(matcher.group(1));
}

输出:

World

请参阅Regex Pattern doc