2

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

我从这个 SO 解决方案中得到了一个正则表达式,它与我希望在 rubular 中匹配的组匹配,但我在 java 中的实现不匹配。当它打印“值”时,它正在打印 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 个或多个逗号)

4

6 回答 6

4

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

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

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

编辑:

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

value = commaSeparatedString.substring( commaSeparatedString.indexOf(",") );
于 2013-01-10T17:56:45.380 回答
3

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

String myRegex = "[^,]*,(.*)";
于 2013-01-10T17:59:53.253 回答
1

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

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

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

于 2013-01-10T17:59:14.597 回答
0

我会这样做

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

    System.out.println(commaSeparatedString.substring(commaSeparatedString.indexOf(",")+1));
于 2013-01-10T18:02:15.003 回答
0

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

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

Byt 恕我直言德尔的回答最适合您的情况。

于 2013-01-10T18:08:43.963 回答
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]);
于 2013-01-10T18:11:53.610 回答