繁体   English   中英

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

[英]Matching everything after the first comma in a string

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

我从这个SO解决方案中获得了一个正则表达式,它与我想要的组相匹配,但我在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个或更多逗号)

如果您不必使用正则表达式解决它,您可以尝试这样做:

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

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

编辑:

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

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

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

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

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

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

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

我会这样做的

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

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

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

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

Byt IMHO Del的答案最适合你的情况。

我会使用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]);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM