C# 如何将字符串拆分为一个字符,但仅当它不包含在括号内时?

C# 如何将字符串拆分为一个字符,但仅当它不包含在括号内时?,c#,regex,C#,Regex,输入:((为什么,见鬼),(问我),(Bla,No)) 如何将此数据拆分为字符串数组: Element1 (Why,Heck) Element2 (Ask,Me) Element3 (Bla,No) 我尝试了String.Split或String.TrimEnd/Start,但结果不可能总是错误的 使用Regex会更好吗?var input=“((为什么,见鬼),(问我),(Bla,No))”; var input = "((Why,Heck),(Ask,Me),(Bla,N

输入:
((为什么,见鬼),(问我),(Bla,No))

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

  Element1  (Why,Heck)
  Element2  (Ask,Me)
  Element3  (Bla,No)
我尝试了String.Split或String.TrimEnd/Start,但结果不可能总是错误的

使用Regex会更好吗?

var input=“((为什么,见鬼),(问我),(Bla,No))”;
var input = "((Why,Heck),(Ask,Me),(Bla,No))";

var result = Regex.Matches(input, @"\([^\(\)]+?\)")
                  .Cast<Match>()
                  .Select(m => m.Value)
                  .ToList();
var result=Regex.Matches(输入@“\([^\(\)]+?\)”) .Cast() .选择(m=>m.Value) .ToList();
另一种非正则表达式的方法应该有效:

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

  • 删除所有括号以简化拆分
  • 除以“,”
  • 两人一组读取返回的数组。使用for循环或类似的递归算法,得到索引0和1,2和3e.t.c
  • 用括号重建

  • 或者你可以只使用正则表达式

    我尝试了String.Split或String.TrimEnd/Start,但结果不可能总是错误的。
    你尝试了什么?为什么不在问题中?用这个测试它是正确的,除了一件事。它与第一个括号匹配:
    ((为什么,见鬼)
    你能修复它与第一个括号匹配的错误吗?@Pheonixblade9已修复。你可以简化:
    @“\([^(]+?\)”
    。回答得好,但仅供参考,你不需要再使用不情愿的量词,也不必在字符类中转义括号。