我有一个字符串,我想将此字符串拆分为数组,如下所示:
string stemp = "a,b,c,\"d,e f\",g,h";
array[0] = a
array[1] = b
array[2] = c
array[3] = d,e f
array[4] = g
array[5] = h
我尝试过关注syntax
string array[] = null;
array = stemp.split(',');
答案 0 :(得分:4)
这看起来像CSV - 解析时不那么简单(考虑转义时)。
我建议使用CSV解析器,例如Microsoft.VisualBasic.FileIO
命名空间中的TextFieldParser
类。
有许多替代方案,例如FileHelpers。
答案 1 :(得分:3)
使用CSV解析器可能是正确的解决方案,但您也可以使用正则表达式:
var stemp = @"a,b,c,""d,e f"",g,h";
var regex = new Regex(@"^(?:""(?<item>[^""]*)""|(?<item>[^,]*))(?:,(?:""(?<item>[^""]*)""|(?<item>[^,]*)))*$");
var array = regex
.Match(stemp)
.Groups["item"]
.Captures
.Cast<Capture>()
.Select(c => c.Value)
.ToArray();
不幸的是,正则表达式往往难以理解,所以这里是对各个部分的简短描述:
""(?<item>[^""]*)""
匹配"d,e f"
。
(?<item>[^,]*)
这匹配a
和b
等。两个表达式都捕获指定组item
的相关部分。
这些表达式(让我们称之为A
和B
)使用交替构造进行组合,并使用非捕获组进行分组:
(?:A|B)
让我们调用这个新表达式C
。然后整个表达式(再次使用非捕获组):
^C(?:,C)*$