日期:2014-05-20  浏览次数:20964 次

如何用正则表达式描述一个不在一对小括号中的逗号?
需求是按逗号","来分割字符串,但这个逗号不能包含在一对括号中,比如
"(aa,bb) adf , asdfa,afd()"
应该返回
(aa,bb) adf 
 asdfa
afd()
这样
请教该如何写?

------解决方案--------------------
这个在java中的正则做不到,因为java的正则不支持平衡组
------解决方案--------------------
可以有这个思路 先用正则匹配到括号内的逗号然后修改成任意不常见字符串比如!@#,然后用,split分组,再遍历数组每一项 如果string.contains("!@#")就replace成,
关键就是第一步怎么找到括号内的,
(?<=\(.*),(?=[^(]*\))可以匹配到这个逗号
具体代码:
string ss = "(aa,bb) adf , asdfa,afd()";
            string newstr = Regex.Replace(ss, @"(?<=\(.*),(?=[^(]*\))", "!@#");
            string[] list= newstr.Split(new char[]{','}, StringSplitOptions.RemoveEmptyEntries);
            List<string> temp = new List<string>();
            foreach (var item in list)
            {
                temp.Add(item.Replace("!@#", ","));
            }
            string result = string.Join(",",temp);
------解决方案--------------------
给你个思路,先用正则将所有()中的内容用list存起来,然后就将字符串的相应的内容用A,B,C等等先代替,然后split(","),然后再把A,B,C用list中的对应的换过来