用于括号的Java扩展字符串拆分正则表达式

时间:2014-07-21 12:41:05

标签: java regex split

我希望首先出现"("和最后")"分割字符串。

例如我有一个字符串:recordWith(camera(),smartphone());

我想:

        [0] recordWith
        [1] camera()
        [2] smartphone()

我有正则表达式"[\\()]",但这会拆分所有括号。

有人可以帮助我吗?

3 个答案:

答案 0 :(得分:1)

表达式

^([^()]*)\((.*)\)([^()]*)$

将输入字符串分成三个捕获。

说明:

^$将匹配锚定到整个输入字符串。

([^()]*)部分找到零个或多个不是圆括号的字符并将它们保存在第一个捕获组中,外部圆括号表示捕获组。

\(匹配第一个真正的括号。

(.*)捕获中间部分。

\)与最后一个括号匹配。

([^()]*)找到零个或多个不是圆括号的字符。

使用Notepad ++ 6.6.7检查正则表达式。无权访问Java以了解如何使用捕获的值。

答案 1 :(得分:1)

查找前后空格。

String s = "recordWith( camera(), smartphone() )";
String[] parts = s.split("[(,]\\s+|\\s+\\)$");
System.out.println(Arrays.toString(parts)); 

输出

[recordWith, camera(), smartphone()]

答案 2 :(得分:0)

您可以使用split()方法,在所有情况下,在括号和逗号后是否有空格。

Live demo

String s="recordWith( camera(), smartphone() )";    
System.out.println(Arrays.toString(s.split("\\((?!\\))\\s*|\\s*\\)$|,\\s*")));

OR

Live demo

System.out.println(Arrays.toString(s.split("\\s*(\\((?!\\))|,|(?<!\\()\\))\\s*")));

输出:

[recordWith, camera(), smartphone()]