在C#中分割逗号分隔的值

时间:2019-08-30 14:10:54

标签: c# .net

我正在使用c#。我有一个字符串“ 1,2-Benzene-d4”,36925,10.483,0.95,

预期的字符串数组为

str[0] = "1,2-Benzene-d4"
str[1] = 36925
str[2] = 10.483
str[3] = 0.95
str[4] =  

我尝试使用以下函数实现拆分,其中mystring是输入字符串定界符为(,)

  public static string[] SplitDelimitedText(string myString, string delimiter, out int numberOfFields)
    {
        string strDelimiter = "\"" + delimiter;
        string[] strSeperator = null;
        //string[] arrayOfFields = new string[numberOfFields+1];
        List<string> arrayOfFields = new List<string>();
        try
        {
            if (!string.IsNullOrEmpty(myString))
            {
                if (myString.StartsWith("\""))
                {
                    strSeperator = new string[1];
                    strSeperator[0] = strDelimiter;
                }
                else
                {
                    strSeperator = new string[2];
                    strSeperator[0] = strDelimiter;
                    strSeperator[1] = delimiter;
                }

                string[] arrayOfSplitString = myString.Split(strSeperator, StringSplitOptions.None);
                arrayOfFields.Add("");
                for (int iCount = 0; iCount < arrayOfSplitString.Length; iCount++)
                {
                    arrayOfFields.Add(arrayOfSplitString[iCount].Replace("\"", "").Trim());                       
                }
                numberOfFields = arrayOfSplitString.Length;
            }
            else
                numberOfFields = 0;
        }
        catch
        {
            throw;
        }
        return arrayOfFields.ToArray();
    }

2 个答案:

答案 0 :(得分:1)

如注释中所述,您可以通过在构造函数中传递字符串来使用TextFieldParser类。

另一种方法是使用正则表达式来解决它。这是一个示例:

navController.navigate(directions)

答案 1 :(得分:1)

正则表达式是必经之路。试试这个NetFiddle

using System;
using System.Text.RegularExpressions;

public class Program
{
    public static void Main()
    {
            var input ="\"1,2-Benzene-d4\",36925,10.483,0.95,,";
            //Define pattern
            Regex CSVParser = new Regex(",(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))");

            //Separating columns to array
            string[] X = CSVParser.Split(input);

            for (int i=0;i<X.Length;i++)
                Console.WriteLine("{0}: {1}\n",i,X[i]);
    }
}
相关问题