我正在从一些旧硬件解析文本文件,我需要从一个长字符串中提取一个字符串数组。
'你好','世界'
{"'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
答案 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());
}
另外,我不确定你的琴弦是否有收缩。