如何按字符分割字符串,但仅当它不包含在括号内时?

时间:2014-06-26 20:44:32

标签: c# regex

输入:((Why,Heck),(Ask,Me),(Bla,No))

如何将此数据拆分为字符串数组:

  Element1  (Why,Heck)
  Element2  (Ask,Me)
  Element3  (Bla,No)

我尝试了String.Split或String.TrimEnd / Start,但结果总是错误。

Regex会更好吗?

3 个答案:

答案 0 :(得分:4)

var input = "((Why,Heck),(Ask,Me),(Bla,No))";

var result = Regex.Matches(input, @"\([^\(\)]+?\)")
                  .Cast<Match>()
                  .Select(m => m.Value)
                  .ToList();

答案 1 :(得分:1)

另一种 - 非正则表达方法应该有效:

string[] result = str.Split(new[]{"),"}, StringSplitOptions.None)
     .Select(s => string.Format("({0})", s.Trim('(', ')')))
     .ToArray();

Demo

答案 2 :(得分:0)

你也可以:

  1. 删除所有括号以简化拆分
  2. 由','
  3. 拆分
  4. 以两人为一组读取您返回的数组。那是使用for循环或类似的递归算法,得到索引0和1,2和3 e.t.c
  5. 用括号重建
  6. 或者您可以使用正则表达式