正则表达式在空格和其他字符上分割字符串

时间:2012-12-18 18:53:02

标签: java regex string split

Pattern p = Pattern.compile("(.+)\\s(.+)\\s(.?)$");
Matcher m = p.matcher(line);
System.out.println("Method:");  
System.out.println(m.group(1));
System.out.println(m.group(2));

上面的代码是我用来分割这个字符串的代码:

method(public, static, void) main(String[] args){

我希望能够在字符串中获取method(public, static, void),在另一个字符串中获得main(String[] args)。我不想要上一个{){之间可能有空格。

到目前为止我的代码是这样做的:

Method:
method(public, static, void) main(String[]
args){ 

我对正则表达不擅长。 (我的代码目前没有处理最后一个{,但我可以解决这个问题。)问题是我无法按照我想要的方式划分界限。

3 个答案:

答案 0 :(得分:1)

此处您不需要PatternMatcher。您应该使用String#split()方法split )String str = "method(public, static, void) main(String[] args){"; String[] parts = str.split("\\)"); System.out.println(parts[0]); // method(public, static, void System.out.println(parts[1]); // main(String[] args 的字符串,并获取数组的前两个元素: -

)

但是,您可以看到的问题是,您的字符串不会包含其中的最后一个"(?<=\\))"

要在数组元素中包含分隔符,可以在正则表达式中使用 look-behind : - empty character。现在,这会将您的字符串拆分为)前面的String[] parts = str.split("(?<=\\))"); // split on empty character after ) System.out.println(parts[0]); System.out.println(parts[1]);

这就是您所需要的: -

method(public, static, void)
 main(String[] args)

输出: -

{{1}}

答案 1 :(得分:1)

String str = "method(public, static, void) main(String[] args){";
Pattern pattern = Pattern.compile("\\p{Alnum}+\\([^)]*?\\)");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
    System.out.println(matcher.group());
}

产生以下输出:

method(public, static, void)
main(String[] args)

答案 2 :(得分:0)

如果您匹配:

/([^\(\)]+\([^\)]+\))([^\(\)]+\([^\)]+\))/

您应该在$1$2

中准确找到所需内容