C#:拆分以逗号分隔的字符串,但如果逗号用单引号括起来则不能

时间:2017-12-06 02:33:58

标签: c# string

我正在从一些旧硬件解析文本文件,我需要从一个长字符串中提取一个字符串数组。

  • 元素以逗号分隔
  • 每个字符串都用单引号括起来
  

'你好','世界'

{"'Hello', "'World'"}

任何其他原因的单引号都是非法的,并且没有相应的转义字符;你不能写“Bob's”这个词也不能写“鲍勃的”。

通常,通过分割逗号来获取单个元素很容易:

string testString = "'Hello', 'World'";
ArrayList result = new ArrayList(testString.Split(',');

但我不能这样做;如果逗号介于单引号之间,则它是 text ,而不是分隔符。

这是一个要素:

  

'你好,世界'

{"'Hello, World'"}

如何提取元素以检查逗号是否在单引号之间?

  

'你好','世界','你好,世界'

{"'Hello'", "'World'", "'Hello, World'"}

还有一个细节:我无法保证元素之间的空白量:

  

'你好','世界','你好,世界'

P.S。以下是我向Swift提出的问题:Swift: Split comma-separated strings, but not if comma enclosed in single quotes

3 个答案:

答案 0 :(得分:1)

您还没有回答字符串是否包含嵌入的单引号和&他们将如何被逃脱。

如果每个字符串都遵循[SingleQuote][Text][SingleQuote]的模式,那么这是一个可以满足你需要的RegEx:

'[^']+'

如果单引号中有空字符串,请使用:

'[^']*'

答案 1 :(得分:0)

最简单的方法是使用Json deserialzer:

    private string[] F(string input){    
        return Newtonsoft.Json.
           JsonConvert.DeserializeObject("["+input+"]",typeof(string[]));
       }
// now call F:
var result= F("'Hello','World','Hello,World'");

答案 2 :(得分:-2)

我试过这种方法,但我想知道这是否适用于大部分时间。

        const string str = "'Hello', 'World', 'Hello, World'";
        ArrayList arrStr = new ArrayList(str.Split('\''));
        List<string> myString = new List<string>();
        for (int i = 0 + 1; i < arrStr.Count; i+=2)
        {
            myString.Add(arrStr[i].ToString());
        }

另外,我不确定你的琴弦是否有收缩。