【发布时间】:2017-11-01 03:51:50
【问题描述】:
我需要拆分一个逗号分隔的字符串,其内容有时在引号之间。一个例子可能是:
1,"TEST",22345,"18,95", Ab"cde
这里的第一个问题是只有在逗号没有被“18,95”之类的引号包围时才拆分字符串。我已经用一个简单的正则表达式做到了。下一个问题是剪掉引号,它们围绕着内容。对于“TEST”和“18,95”,应删除引号。Ab"cde 中的引号应保持不变。到目前为止,这是我的代码:
List<string> results = Regex.Matches(this.Content, @"[\""](.+?)[\""]|[^,]+")
.Cast<Match>()
.Select(m => m.Value)
.Select(s => s.StartsWith("\"") && s.EndsWith("\"") ? s.Remove(1,1).Remove(s.Length-1,1) : s)
.ToList();
对于第二个Select,我得到一个ArgumentOutOfRangeException,因为第二个Remove 不再适用于s。我认为它应该可以工作,但不知何故没有。
如果有更好的方法来做到这一点,我很乐意了解它。
【问题讨论】:
-
您尝试过 CSV 解析器吗?
-
提示:字符串是不可变的。
-
@WiktorStribiżew 我正在尝试实现一个
-
你不需要实现一个,它已经存在于 C# 中。您接受的答案将在转义引号中失败。
-
@WiktorStribiżew 你绝对赢了!来自
Microsoft.VisualBasic.FileIO的 TextFieldParser 是要走的路!如果您发布答案,我会选择它为正确的。谢谢