[英]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.