我有一个列表字符串,其中包含一系列不同类型的数据。我一次读入列表字符串行,每一行我使用
string[] tableNa = line.Split(',');
这会在一行中获取所有不同的数据,用逗号分隔。但是我有一些这样的行:
47,493,'1 = EMPTY, 2 = SEND, 3 = SENDING, 4 = SENT, 5 = NOTSENT. ',0,
我希望拆分在引号内不起作用,因为我需要将其保留为一个数据。这可能吗?
这可能吗?
显然可以做到这一点 - 但不是没有string.Split
,没有别的。
如果你想要 CSV 解析,你应该找到一个好的(可能是开源的)CSV 解析库。我相信周围有很多,而且它们可能比您在尝试提供更具体的商业价值时偶然创建的任何东西都更可靠。
具体来说,这个(正则表达式看起来很可怕,我知道,但它相对简单):
public void SplitCSV(string input)
{
Regex csvSplit = new Regex("(?:^|,)(\"(?:[^\"]+|\"\")*\"|[^,]*)", RegexOptions.Compiled);
foreach (Match match in csvSplit.Matches(input))
{
Console.WriteLine(match.Value.TrimStart(','));
}
}
private void button1_Click(object sender, RoutedEventArgs e)
{
SplitCSV("111,222,\"33,44,55\",666,\"77,88\",\"99\"");
}