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

时间:2016-10-13 19:49:43

标签: c# arrays string split

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

字符串看起来像:

  

约翰: “二零一六年十月十五日”: “15时二十分14秒”: “经理”

如果我跑:

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

它将字符串拆分为6个项目,而实际上只应该为4个。

Split函数可以处理这个问题吗?

编辑: 这6项是:

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

我期待时间(15:20:14)成为一个项目。

2 个答案:

答案 0 :(得分:2)

恕我直言,你需要一个有两种状态的解析器:内部引号和外部引号。

存在类似Fast CSV Reader的库,可以针对分隔符(:)和引号字符(")进行配置,甚至可以如何转义引号字符。

答案 1 :(得分:2)

由于第一个元素没有用引号括起来,所以它真的会让一个干净的分裂。如果你不想使用第三方库,这是做了一些假设,因为我不知道你的情况下哪种类型的输入字符串是有效的,即如果第一个元素只是冒号怎么办? ?

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. 第一个"元素"在字符串中将始终打开
  2. 字符串上的任何其他元素都将遵循当前的分隔样式,例如John:"2016/10/15":"15:20:14":"Manager":"My new string"
  3. 不需要保留空元素