匹配字符串中第一个逗号后的所有内容

时间:2013-01-10 17:54:44

标签: java regex string

我正在使用java来进行正则表达式匹配。我使用rubular验证匹配和ideone来测试我的代码。

我从this SO solution获得了一个正则表达式,它与我想要的组相匹配,但我在java中的实现并不匹配。当它打印'value'时,它打印的值为commaSeparatedString而不是matcher.group(1)我希望捕获的println组/输出为“v123_gpbpvl-testpv1,v223_gpbpvl-testpv1-iso”

String commaSeparatedString = "Vtest7,v123_gpbpvl-testpv1,v223_gpbpvl-testpv1-iso";
//match everything after first comma
String myRegex = ",(.*)";
Pattern pattern = Pattern.compile(myRegex);
Matcher matcher = pattern.matcher(commaSeparatedString);
 String value = "";
if (matcher.matches())
    value = matcher.group(1);
else
    value = commaSeparatedString;                     
System.out.println(value);

(编辑:我遗漏了commaSeparatedString并不总是包含2个逗号。相反,它总是包含0个或更多逗号)

6 个答案:

答案 0 :(得分:4)

如果你不需要用正则表达式来解决它,你可以试试这个:

int size = commaSeparatedString.length();
value = commaSeparatedString.substring(commaSeparatedString.indexOf(",")+1,size);

即,上面的代码返回从第一个逗号索引开始的子字符串。

修改

抱歉,我省略了更简单的版本。感谢其中一位评论员,你也可以使用这一行:

value = commaSeparatedString.substring( commaSeparatedString.indexOf(",") );

答案 1 :(得分:3)

正则表达式的定义是错误的。它应该是:

String myRegex = "[^,]*,(.*)";

答案 2 :(得分:1)

你是Java误导的正则表达式方法命名的另一个受害者。

.matches()自动将正则表达式锚定在开头和结尾(这与“正则表达式匹配”的定义完全矛盾)。您要查找的方法是.find()

然而,对于这样一个简单的问题,最好使用@ DelShekasteh的解决方案。

答案 3 :(得分:0)

我会这样做

    String commaSeparatedString = "Vtest7,v123_gpbpvl-testpv1,v223_gpbpvl-testpv1-iso";

    System.out.println(commaSeparatedString.substring(commaSeparatedString.indexOf(",")+1));

答案 4 :(得分:0)

这是另一种限制拆分的方法

String[] spl = "Vtest7,v123_gpbpvl-testpv1,v223_gpbpvl-testpv1-iso".split(",", 2);
if (spl.length == 2)
    System.out.println(spl[1]);

Byt IMHO Del's answer最适合你的情况。

答案 5 :(得分:0)

我会使用replaceFirst

String commaSeparatedString = "Vtest7,v123_gpbpvl-testpv1,v223_gpbpvl-testpv1-iso";
System.out.println(commaSeparatedString.replaceFirst(".*?,", ""));

打印

v123_gpbpvl-testpv1,v223_gpbpvl-testpv1-iso

或者你可以使用较短但迟钝的

System.out.println(commaSeparatedString.split(",", 2)[1]);