C# 我想使用分隔字符分割字符串数组,引号之间的情况除外 这是我的代码,使用分隔字符分割我的字符串数组,但不考虑标题中的问题: char[] delimitedChars = { ',', '\n', '"' }; words = stringamabob.Split(delimitedChars);

C# 我想使用分隔字符分割字符串数组,引号之间的情况除外 这是我的代码,使用分隔字符分割我的字符串数组,但不考虑标题中的问题: char[] delimitedChars = { ',', '\n', '"' }; words = stringamabob.Split(delimitedChars);,c#,winforms,visual-studio-2010,split,delimited-text,C#,Winforms,Visual Studio 2010,Split,Delimited Text,我希望所有这些都是真的,除了我不希望逗号在引号之间时是分隔字符 例如,如果我有: stringamabob=1,2,3,“4,5”,6 我会得到: 字[0]=一个 单词[1]=两个 单词[2]=三个 单词[3]=四个 单词[4]=5 单词[5]=6 我想去哪里 字[0]=一个 单词[1]=两个 单词[2]=三个 单词[3]=四,五 words[4]=six试试这个,如果引号嵌套在一起(这很少见),它将不起作用,但在所有其他情况下都应该起作用 string[] quotesplit = strin

我希望所有这些都是真的,除了我不希望逗号在引号之间时是分隔字符

例如,如果我有:

stringamabob=1,2,3,“4,5”,6

我会得到:

字[0]=一个

单词[1]=两个

单词[2]=三个

单词[3]=四个

单词[4]=5

单词[5]=6

我想去哪里

字[0]=一个

单词[1]=两个

单词[2]=三个

单词[3]=四,五


words[4]=six

试试这个,如果引号嵌套在一起(这很少见),它将不起作用,但在所有其他情况下都应该起作用

string[] quotesplit = stringamabob.Split('"'); //Split by quotes.
char[] delimitedChars = { ',', '\n'}; //remove quotes from these delimiters because we've already split by them
List<string> words = new List<string>();
bool toggle = stringamabob.StartsWith("\""); //check if the first item is quoted
foreach(string chunk in quotesplit)
{
    if(toggle) //toggle is true when we're not inside quotes
    {
        words.AddRange(chunk.Split(delimitedChars));
    }
    else
    {
        words.Add(chunk);
    }
    toggle = !toggle;
}
string[]quotesplit=stringamabob.Split(“”);//按引号拆分。
char[]delimitedChars={',','\n'};//删除这些分隔符中的引号,因为我们已经用它们拆分了
列表单词=新列表();
bool toggle=stringamabob.StartsWith(“\”)//检查是否引用了第一项
foreach(quotesplit中的字符串块)
{
if(toggle)//当我们不在引号内时,toggle为true
{
words.AddRange(chunk.Split(delimitedChars));
}
其他的
{
添加(块);
}
切换=!切换;
}

像这样的正则表达式似乎可以工作:

"(.*)"|(\S*),|(\S*)$
如图所示


您将在第1组(引号)或第2组(逗号)或第3组(行尾)中找到匹配项。

您可能需要进行两次单独的拆分。首先按引号将其拆分,并在一个数组中创建这些元素,然后将它们从原始数组中取出。然后在第二个数组中用逗号分割。然后将这两个数组合并到结果中。这不是一个坏主意,但一切都必须保持有序。这是有关解析CSV的所有问题的副本:也是上面链接问题中链接到的问题:.NET具有内置的。你可能想看看这门课,我会试试看。我没有相互嵌套的引号。:)