一些正则表达式将为您执行此操作:
public static void main(String[] args) {
final String[] myStrings = new String[] {"[17235_A, 17235_B, -1.0, 0.06838527, 1.0]", "[17235_C, 17235_D, -1.0, 0.06838527, 1.0]", "[17235_E, 17235_F, -1.0, 0.06838527, 1.0]"};
final Pattern pattern = Pattern.compile("^\\[([^,]++),\\s*+([^,]++).*+$");
for(final String string : myStrings) {
final Matcher matcher = pattern.matcher(string);
if(matcher.matches()) {
System.out.println(matcher.group(1));
System.out.println(matcher.group(2));
System.out.println("Done");
}
}
}
输出:
17235_A
17235_B
Done
17235_C
17235_D
Done
17235_E
17235_F
Done
正则表达式的解释:
^
匹配字符串的开头
\\[
匹配开头的“[”(双转义)
- 将
([^,]++)
内容匹配到第一个逗号,这更像是一种优化而不是必要性
- then 匹配一个逗号,
,\\s*+
后跟任意数量的空格(再次肯定)
- 将
([^,]++)
内容匹配到下一个逗号
- 匹配内容
.*$
直到行尾(再次可能)
两个匹配组现在包含所需String
的 s。
这是一篇关于为什么尽可能使用所有格匹配的非常好的文章。