繁体   English   中英

c#用一些分隔符和分隔符分割字符串

[英]c# Split string with some delimiters and separators

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

字符串看起来像:

约翰:"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) 成为一项。

恕我直言,您需要一个具有 2 个状态的解析器:内引号和外引号。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM