复杂的正则表达式与数字和数字组

时间:2018-02-06 09:17:45

标签: java regex regex-lookarounds

我有这样的字符串作为输入:

(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 ;;

1 个答案:

答案 0 :(得分:3)

你可以试试这个正则表达式:

,(?!(?:(?:[^\(\)]*[\(\)]){2})*[^\(\)]*$)

这将匹配应替换为的所有逗号(,) - 或者您也可以通过上述正则表达式进行拆分

<强>解释

逻辑是找到一个逗号,后面没有偶数个括号

Regex101 Demo

示例来源(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]