java在括号中拆分字符串时的正则表达式

时间:2013-03-29 06:10:01

标签: java split

我有String喜欢

Move Selected Patients (38)

我想使用java split检索括号之间的38

尝试使用此代码:

String a1 = "Move Selected Patients (38)";
String[] myStringArray = new String[2];
myStringArray = a1.split("(", 2);
System.out.println(myStringArray[0]);

并且失败并出现此异常:

java.util.regex.PatternSyntaxException: Unclosed group near index 1.

任何人都可以帮助我。

5 个答案:

答案 0 :(得分:5)

你需要逃避paren,因为split参数仍然是正则表达式:\\(。请记住,这仍然会将38)作为第二个元素返回。使用Matcher来捕获组中括号的内容会更有意义:\\((.*?)\\)

答案 1 :(得分:2)

Pattern p = Pattern.compile(".*\\(([0-9]*)\\)");
Matcher m = p.matcher("Move Selected Patients (38)");
String s = m.group(1);

如果您还需要字符串的其他部分,只需使用另一个组即可。

答案 2 :(得分:2)

您可以使用正则表达式轻松达到要求,如下所示:

String str = "Move Selected Patients (38)";
Pattern pattern = Pattern.compile("\\((\\d+)\\)");
Matcher match = pattern.matcher(str);
while(match.find()) {
    System.out.println(match.group(1));
}

答案 3 :(得分:1)

(是用于群组的保留字符,您需要使用\

来转义它

答案 4 :(得分:1)

(是正则表达式元字符,您必须使用\\来转义它。试试\\(