【问题标题】:split function settings拆分功能设置
【发布时间】:2012-07-19 16:12:50
【问题描述】:

我有一个列表字符串,其中包含一系列不同类型的数据。我一次读入列表字符串行,每行我使用

拆分它

string[] tableNa = line.Split(',');

这会在一行中获取由逗号分隔的所有不同数据。但是我有一些这样的行:

47,493,'1 = EMPTY, 2 = SEND, 3 = SENDING, 4 = SENT, 5 = NOTSENT. ',0,

并且我希望拆分在引号内不起作用,因为我需要将其保留为一个数据。这可能吗?

【问题讨论】:

标签: c# split


【解决方案1】:

这可能吗?

显然可以做到这一点 - 但不能使用 string.Split 或其他任何东西。

如果你想要 CSV 解析,你应该找到一个好的(可能是开源的)CSV 解析库。我相信周围有很多,而且它们可能比您在尝试提供更具体的商业价值时偶然创建的任何东西都更可靠。

【讨论】:

    【解决方案2】:

    split a comma-separated string with both quoted and unquoted strings

    具体来说,这个(我知道正则表达式看起来很可怕,但它相对简单):

    public void SplitCSV(string input)
    {
        Regex csvSplit = new Regex("(?:^|,)(\"(?:[^\"]+|\"\")*\"|[^,]*)", RegexOptions.Compiled);
    
        foreach (Match match in csvSplit.Matches(input))
        {
            Console.WriteLine(match.Value.TrimStart(','));
        }
    }
    
    private void button1_Click(object sender, RoutedEventArgs e)
    {
        SplitCSV("111,222,\"33,44,55\",666,\"77,88\",\"99\"");
    }
    

    【讨论】:

      猜你喜欢
      • 2013-02-08
      • 1970-01-01
      • 2016-02-26
      • 1970-01-01
      • 1970-01-01
      • 2013-11-27
      • 2011-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多