假如我有一个要处理的字符串",abc,df,ssd,dfdf,",需要将其分割为 "abc" "df" "ssd" "dfdf" 但是使用正则表达式分割的时候只等分割为"abc" "ssd" 即"abc" 被匹配后他后面的逗号被使用了导致"df"不能被匹配,请高手解决。

解决方案 »

  1.   

    恩,这个也可以用string.split(',')来解决
      

  2.   

    1、这个问题根本用不着正则
    2、就算是用正则,你的正则肯定是错的,跟回溯也扯不上关系string test = ",abc,df,ssd,dfdf,";
    string[] result = test.Split(new char[]{','}, StringSplitOptions.RemoveEmptyEntries);
    foreach (string s in result)
    {
        richTextBox2.Text += s + "\n";
    }
      

  3.   

    2楼的是错的
    正则是(?!,)\w+(?<!,)
      

  4.   

    不好意思,可能我说的不够清楚,这个问题的来源是因为我要处理一个CSV文件,因为如果csv文件某个字段存在逗号的话会在该字段首尾添加双引号,这样再使用split分割的时候就不能得到正确的字符数组,所以需要将这样的特殊情况进行处理,必须要使用正则表达式。
      

  5.   

    ((?<=,)(?!")[^,]+(?<!")(?=,))|((?<=,")[^"]+(?=",))
      

  6.   

    给实例及对应的结果,要最终用的结果,类似于 Console.WriteLine(yourStr);呈现在控制台上的内容
      

  7.   

    从csv文件中读取的某行数据: sss,"sdfdsf,sss",df,ssss,"ddd,dfdf","df,gg"
    处理后结果: sss  sdfdsf,sss  df  ssss  ddd,dfdf  df,gg
    不知道有没有说明白
      

  8.   


    这是最 Biu 准的答案了
      

  9.   

    ((?<=(,|^))(?!")[^,]+(?<!")(?=(,|$)))|((?<=(,|^)")[^"]+(?="(,|$)))
    注意原字串前后空格要去掉
      

  10.   

    try...string test = "sss,\"sdfdsf,sss\",df,ssss,\"ddd,dfdf\",\"df,gg\"";
    Regex reg = new Regex("\"(?<c>[^\"]+)\"|(?<c>[^,]+)");
    MatchCollection mc = reg.Matches(test);
    foreach (Match m in mc)
    {
        richTextBox2.Text += m.Groups["c"].Value + "\n";
    }
      

  11.   

    ((?<=,)(?!")[^,]+(?<!")(?=,))|((?<=,")[^"]+(?=",))
      

  12.   

    正则真的不用这么罗嗦
    public string[] GetSplitNumber(string s)
    {
        Regex regex = new Regex(@"\b\w+\b");
        MatchCollection mc = regex.Matches(s);
        List<string> ls = new List<string>();
        foreach (Match m in mc)
        {
            ls.Add(m.Value);
        }
        return ls.ToArray();
    }