如何用正则表达式描述一个不在一对小括号中的逗号?
需求是按逗号","来分割字符串,但这个逗号不能包含在一对括号中,比如
"(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中的对应的换过来