我有这样的字符串作为输入:
(1,3,4,(3,4,21),55,69,12,(3,8),9)
我希望将此输出作为数组或字符串列表
1 - 3 - 4 - (3,4,21) - 55 - 69 - 12 - (3,8) - 9
有人可以帮忙吗?我试过几个正则表达式,但没有运气。
编辑:请注意" - "在输出中表示相同数组或列表的不同元素,而不是所需的字符。
示例:array [0] =" 1&#34 ;;阵列[1] =" 3&#34 ;;阵列[3] ="(3,4,21)&#34 ;;
答案 0 :(得分:3)
你可以试试这个正则表达式:
,(?!(?:(?:[^\(\)]*[\(\)]){2})*[^\(\)]*$)
这将匹配应替换为的所有逗号(,) - 或者您也可以通过上述正则表达式进行拆分
<强>解释强>:
逻辑是找到一个逗号,后面没有偶数个括号(和)
示例来源(run here):
final String regex = ",(?!(?:(?:[^\\(\\)]*[\\(\\)]){2})*[^\\(\\)]*$)";
final String string = "(1,3,4,(3,4,21),55,69,12,(3,8),9)";
String[] result=string.split(regex);
int len=result.length;
for(int i=0;i<len;i++)
{
// the following two if condition is necessary to remove the start and end brace
// many other and probably better alternatives could be there to remove it
if(result[i].contains("(") && !result[i].contains(")"))
result[i]=result[i].replace("(","");
else if(result[i].contains(")") && !result[i].contains("("))
result[i]=result[i].replace(")","");
}
System.out.println(java.util.Arrays.toString(result));
输出:
[1, 3, 4, (3,4,21), 55, 69, 12, (3,8), 9]