C# 使用'拆分字符串;在C中#

C# 使用'拆分字符串;在C中#,c#,string,split,C#,String,Split,如何拆分此字符串 1014,'0,1031,1032,1034,1035,1036',0,0,1,1,0,1,0,-1,1 并获取此字符串数组作为结果 1014 '0,1031,1032,1034,1035,1036' 0 0 1 1 0 1 0 -1 1 在C#中,首先在”(单引号)上拆分一个字符串,然后在“逗号”(,)之后执行该操作。我相信这个正则表达式应该为您提供所需的: ('(?:[^']|'')*'|[^',\r\n]*)(,|\r\n?|\n)? 编辑: 有关其工作原理的快速

如何拆分此字符串

1014,'0,1031,1032,1034,1035,1036',0,0,1,1,0,1,0,-1,1
并获取此字符串数组作为结果

1014
'0,1031,1032,1034,1035,1036'
0
0
1
1
0
1
0
-1
1

在C#

中,首先在
(单引号)上拆分一个字符串,然后在“
逗号”(,)之后执行该操作。

我相信这个正则表达式应该为您提供所需的:

('(?:[^']|'')*'|[^',\r\n]*)(,|\r\n?|\n)?

编辑:

有关其工作原理的快速代码片段:

 var rx = new Regex("('(?:[^']|'')*'|[^',\r\n]*)(,|\r\n?|\n)?");
 var text= "1014,'0,1031,1032,1034,1035,1036',0,0,1,1,0,1,0,-1,1";

 var matches = rx.Matches(text);

 foreach (Match match in matches)
 {
     System.Console.WriteLine(match.Groups[1].ToString());
 }

这段代码一点也不漂亮,但它可以工作。:)(不适用于字符串中的多个“字符串”。)

void Main()
{
字符串stuff=“1014,'010311032103410351036',0,0,1,1,0,1,0,-1,1”;
List newStuff=新列表();
var extract=stuff.Substring(stuff.IndexOf('\''),stuff.IndexOf('\'',stuff.IndexOf('\'')+1-stuff.IndexOf('\'')+1);
var oldExtract=提取;
extract=extract.Replace(“,”,“;”);
stuff=stuff.Replace(oldExtract,extract);
AddRange(stuff.Split(new[]{',}));
var newList=newStuff;
对于(var i=0;i
试试这个

string line ="1014,'0,1031,1032,1034,1035,1036',0,0,1,1,0,1,0,-1,1" ;
var values = Regex.Matches(line, "(?:'(?<m>[^']*)')|(?<m>[^,]+)");
foreach (Match value in values) {
  Console.WriteLine(value.Groups["m"].Value);
}
string line=“1014,'010311032103410351036',0,0,1,1,0,1,0,-1,1”;
var values=Regex.Matches(行“(?:”(?[^']*)”)|(?[^,]+)”;
foreach(在值中匹配值){
Console.WriteLine(value.Groups[“m”].value);
}

您不需要解析器,也不需要正则表达式。下面是一个非常简单的版本,它可以完美地工作:

var splits = input
            .Split('\'')
            .SelectMany(
                (s,i) => (i%2==0) 
                ? s.Split(new[]{','}, StringSplitOptions.RemoveEmptyEntries) 
                : new[]{ "'" + s + "'"}
            );

这正是@AVD+@Rawling所描述的。。。在
上拆分“
,只拆分“偶数”结果,然后合并。

调用regex pro!,查看各种CSV解析器,它们都能处理这一点(以及更多)。通常,拆分字符串时,会删除轴心字符。在本例中,第二个结果包含在撇号内。输入字符串中是否会有两个以上的撇号?如果是,会发生什么?。。。仅拆分偶数索引字符串,并再次使用单引号包围奇数索引字符串。然后将所有结果连接为一个数组。这是最好的答案,因为它处理字符串中的多个字符串。保留引号。@NoLifeKing我肯定会同意:)这个答案没有保留引号-正如问题所要求的那样。
using System;
using System.IO;
using Microsoft.VisualBasic.FileIO; //Microsoft.VisualBasic.dll

public class Sample {
    static void Main(){
        string data = "1014,'0,1031,1032,1034,1035,1036',0,0,1,1,0,1,0,-1,1";
        string[] fields = null;
        data = data.Replace('\'', '"');
        using(var csvReader = new TextFieldParser(new StringReader(data))){
            csvReader.SetDelimiters(new string[] {","});
            csvReader.HasFieldsEnclosedInQuotes = true;
            fields = csvReader.ReadFields();
        }
        foreach(var item in fields){
            Console.WriteLine("{0}",item);
        }
    }
}
using System;
using System.IO;
using Microsoft.VisualBasic.FileIO; //Microsoft.VisualBasic.dll

public class Sample {
    static void Main(){
        string data = "1014,'0,1031,1032,1034,1035,1036',0,0,1,1,0,1,0,-1,1";
        string[] fields = null;
        data = data.Replace('\'', '"');
        using(var csvReader = new TextFieldParser(new StringReader(data))){
            csvReader.SetDelimiters(new string[] {","});
            csvReader.HasFieldsEnclosedInQuotes = true;
            fields = csvReader.ReadFields();
        }
        foreach(var item in fields){
            Console.WriteLine("{0}",item);
        }
    }
}