使用一些分隔符和分隔符拆分字符串

本文关键字:分隔符 字符串 拆分 | 更新日期: 2023-09-27 18:12:54

虽然有很多关于字符串分割的帖子,但我找不到解决我的问题的东西。我需要将一个字符串分割成一个数组,但是字符串在某些字段上有分隔符(通常是带分隔符的值)。

字符串看起来像:

约翰:"2016/10/15":"15:20:14":"经理"

如果我运行:

string[] items = line.Split(':');

将字符串分成6个条目,而实际上应该只有4个。

Split函数可以处理这个吗?

编辑:这6项是:

John
2016/10/15
"15
20
14"
"Manager"

我希望时间(15:20:14)是一个项目。

使用一些分隔符和分隔符拆分字符串

我认为你需要一个有两种状态的解析器:内引号和外引号。

存在像Fast CSV Reader这样的库,它可以配置分隔符(:)和引号字符("),甚至可以如何转义引号字符。

由于第一个元素没有用引号括起来,因此很难进行清晰的分割。如果你不想使用第三方库,这是做一些假设,因为我不知道什么类型的输入字符串在你的情况下是有效的,也就是说,如果第一个元素只是冒号呢?

public void GetElements()
    {
        var delimiter = ":";
        var myStr = "John:'"2016/10/15'":'"15:20:14'":'"Manager'"";
        //Split on quotes and remove elements from the array that are the delimter
        var elementArray = myStr.Split(new [] { '"'}, StringSplitOptions.RemoveEmptyEntries);
        elementArray = elementArray.Where(x => x != delimiter).ToArray();
        //Scrub the first element to remove the delimiter
        var firstElement = elementArray.ElementAt(0);
        elementArray[0] = firstElement.Remove(firstElement.Length - 1);
        foreach(var element in elementArray) Console.WriteLine(element);
        Console.ReadKey();
    }

这里的假设是:

  1. 字符串中的第一个"element"将永远被打开
  2. 字符串上的任何附加元素都将遵循当前分隔的样式,例如John:"2016/10/15":"15:20:14":"Manager":"My new string"
  3. 不需要保留空元素