C# 如何在c中使用双引号拆分逗号?

C# 如何在c中使用双引号拆分逗号?,c#,csv,C#,Csv,如何拆分上面的字符串 我需要一个像这样的答案 string strExample = "\"10553210\",\"na\",\"398,633,000\",\"20130709\",\"20130502\",\"20120724\","; 带拆分选项 提前谢谢 string[] arrExample = YourFunc(strExample); arrExample[0] == "10553210"; arrExample[1] == "na"; arrEx

如何拆分上面的字符串

我需要一个像这样的答案

string strExample = 
"\"10553210\",\"na\",\"398,633,000\",\"20130709\",\"20130502\",\"20120724\",";
带拆分选项

提前谢谢

string[] arrExample = YourFunc(strExample);       
arrExample[0] == "10553210";       
arrExample[1] == "na";
arrExample[2] == "398,633,000";
...
可以,但您的代码无法编译。我想你的意思是:

string[] arrExample = strExample.Split(",");

如果这不是你的意思,请更正问题。

假设你的意思是:

string strExample = "10553210,na,398,633,000,20130709,20130502,20120724";
拆分,然后选择子字符串:

string strExample = "\"10553210\",\"na\",\"398,633,000\",\"20130709\",\"20130502\",\"20120724\"";
结果:


你可以这样做

string[] parts = strExample.Split(',').Select(x => x.Substring(1, x.Length - 2)).ToArray();
如果双引号要包含在示例字符串中,则需要对其进行转义。

您可以拆分第一个和最后一个条目,您必须清除最后一个和第一个条目中的双引号:

strExample.Split(',');
这是一个简单的方法

string[] arr = strExample .Split(new string[] { "\",\"" },
               StringSplitOptions.None);

//remove the extra quotes from the last and the first entry
arr[0] = arr[0].SubString(1,arr[0].Length - 1);
int last = arr.Length - 1;
arr[last] = arr[last].SubString(0,arr[last].Length - 1);

您可以不按逗号分割,而是按整个字符串\、\。 不要忘记修剪前导和尾随引号:


使用来自Jodrell的示例

 String strExample =
   "\"10553210\",\"na\",\"398,633,000\",\"20130709\",\"20130502\",\"20120724\"";

 string[] arrExample = St.Trim('"').Split(new String[] {"\",\""}, StringSplitOptions.None);
这对我有用

  private string[] SplitFields(string csvValue)
  {
     //if there aren't quotes, use the faster function
     if (!csvValue.Contains('\"') && !csvValue.Contains('\''))
     {
        return csvValue.Trim(',').Split(',');
     }
     else
     {
        //there are quotes, use this built in text parser
        using(var csvParser = new Microsoft.VisualBasic.FileIO.TextFieldParser(new StringReader(csvValue.Trim(','))))
        {
           csvParser.Delimiters = new string[] { "," };
           csvParser.HasFieldsEnclosedInQuotes = true;
           return csvParser.ReadFields();
        }
     }
  }

您知道不能将字符串构建为逗号分隔值的列表,对吗?您的实际字符串是什么样子的?在您的示例中,这不是一个字符串。这里给出的大多数答案都是正确的,但您仍在搜索中。这是我最终得到的答案strFiledata。Splitnew string[]{\,\},StringSplitOptions.None@janakiakula,请不要用评论来回答你自己的问题。这里有几个答案与您的评论相同。请礼貌地投票选出你认为有用的答案。然后把最早的正确答案标记为答案。否则,下一次,没有人会想回答你的问题,你的帖子对以后的访问者来说基本上是无用的。谢谢你的回答,我需要这个字符串[]arrExample=strExample.Splitnew字符串[]{\,\},然后我想@peer的答案可能就是你想要的。一个非常好的内置解决方案。您将我从不必要的搜索和正则表达式中解救出来。请添加一些解释。
using Microsoft.VisualBasic.FileIO;

IList<string> arrExample;
using(var csvParser = new TextFieldParser(new StringReader(strExample))
{
    fields = csvParser.ReadFields();
}
 String strExample =
   "\"10553210\",\"na\",\"398,633,000\",\"20130709\",\"20130502\",\"20120724\"";

 string[] arrExample = St.Trim('"').Split(new String[] {"\",\""}, StringSplitOptions.None);
  private string[] SplitFields(string csvValue)
  {
     //if there aren't quotes, use the faster function
     if (!csvValue.Contains('\"') && !csvValue.Contains('\''))
     {
        return csvValue.Trim(',').Split(',');
     }
     else
     {
        //there are quotes, use this built in text parser
        using(var csvParser = new Microsoft.VisualBasic.FileIO.TextFieldParser(new StringReader(csvValue.Trim(','))))
        {
           csvParser.Delimiters = new string[] { "," };
           csvParser.HasFieldsEnclosedInQuotes = true;
           return csvParser.ReadFields();
        }
     }
  }
public static IEnumerable<string> SplitCSV(string strInput)
    {
        string[] str = strInput.Split(',');
        if (str == null)
            yield return null;

        StringBuilder quoteS = null;
        foreach (string s in str)
        {
            if (s.StartsWith("\""))
            {
                if (s.EndsWith("\""))
                {
                    yield return s;
                }
                quoteS = new StringBuilder(s);
                continue;
            }

            if (quoteS != null)
            {
                quoteS.Append($",{s}");
                if (s.EndsWith("\""))
                {
                    string s1 = quoteS.ToString();
                    quoteS = null;
                    yield return s1;
                }
                else
                    continue;
            }



            yield return s;
        }
    }
static void Main(string[] args)
    {
        string s = "111,222,\"33,44,55\",666,\"77,88\",\"99\"";
        Console.WriteLine(s);

        var sp = SplitCSV(s);

        foreach (string s1 in sp)
        {
            Console.WriteLine(s1);
        }

        Console.ReadKey();
    }