C#通过正则进行Split的问题

C#中我有一段字符串: "name,title,,(a1,a1),'m1,m2',content",我想要的结果: ["name","title","","(a1,a1)","'m1,m2'","content"],直接使用Split(',')无法得到想要的结果,于是想使用Regex.Split通过正则进行分割,我应该如何定义分隔符?谢谢!

static void Main(string[] args)
{
string str1 = "name,title,,(a1,a1),'m1,m2',content";
string pattern1 = @"(?<=(.*),(?=.*))";
string pattern2 = @"(?<=\'.*),(?=.*\')";
string replacement1 = @"%#$";
str1 = Regex.Replace(str1, pattern1, replacement1);
str1 = Regex.Replace(str1, pattern2, replacement1);
var strs1 = Regex.Split(str1, ",");
var strs2 = new string[str1.Length];
List temp = new List();
foreach (var str in strs1)
{
string tmp = null;
if(str.Contains(replacement1))
{
tmp = str.Replace(replacement1, ",");
}
else
{
tmp = str;
}
temp.Add(tmp);
}
Console.ReadKey();
}
先把()和''内的,号替换成特殊字符,然后split,最后在替换回来

分组中内嵌分隔符的得用编译原来的词法分析来做,正则也搞不了

先从分号开始开始分割,先用括号分割出(a1,a1)再用单引号分割出‘m1,m2’剩下的用逗号分隔就可以了啊

    public static String[] SplitCsv(String value) {
      if (Object.ReferenceEquals(null, value))
        return null;

      const Char quotation = '\'';
      const Char separator = ',';

      List<String> result = new List<String>();

      Boolean inQuotation = false;
      Boolean isStarted = false;

      StringBuilder Sb = new StringBuilder();

      foreach (Char Ch in value) {
        if (inQuotation) {
          Sb.Append(Ch);
          inQuotation = Ch != quotation;

          continue;
        }

        if (Ch == separator) {
          result.Add(Sb.ToString());
          Sb.Length = 0;
          isStarted = true;
        }
        else {
          Sb.Append(Ch);
          isStarted = false;
          inQuotation = Ch == quotation;
        }
      }

      if (isStarted || (Sb.Length > 0))
        result.Add(Sb.ToString());

      return result.ToArray();
    }

  ....

  var test1 = SplitCsv("1,2,3");   // <- ["1", "2", "3"]
  var test2 = SplitCsv("1,2,");    // <- ["1", "2", ""]
  var test3 = SplitCsv("1,'2',3"); // <- ["1", "'2'", "3"]
  var test4 = SplitCsv("1,'2,3'"); // <- ["1", "'2,3'"]
  var test5 = SplitCsv("1,''");    // <- ["1", "''"]

参考

谢谢大家帮忙,可惜并不是我需要的方法,我只是想要一段正则表达式来帮我分割这段字符串,目前已经在stackoverflow解决了,语句我写在后面了,还是很感谢大家:)

 Regex.Split("name,title,,(a1,a1),'m1,m2',content", @",(?=(?:[^'()]*[('][^()']*[)'])*[^')]*$)")