如何使用LINQ将分隔字符串中的引用字段作为不带引号的值列表?

时间:2015-04-14 04:33:59

标签: c# string linq char delimiter

原始文字行是: "125"|"Bio Methyl"|"99991"|"OPT12"|"CB"|"1"|"12"|"5"|"23"

预期字符串列表没有双引号,并按|分割:

125
Bio Methyl
99991

该文本可能包含空引用的字符串,如(以前的“OPT12”值为空“”)

"125"|"Bio Methyl"|"99991"|""|"CB"|"1"|"12"|"5"|"23"

所以我检查了这两个问题&答案:QA1QA2来推导我的解决方案。

var eList = uEList.ElementAt(i).Split(BarDelimiter);
var xList = eList.ElementAt(0).Where(char.IsDigit).ToList();

当然,由于xList是包含这样的元素的列表,因此它不能像我需要的那样工作:xList(0) = 1, xList(1) = 2, xList(2) = 5

我不想写另一行来加入它们,因为这看起来不是一个合适的解决方案。对LINQ来说,还有更好的东西吗?

2 个答案:

答案 0 :(得分:1)

这个怎么样:

// Based on OPs comment: preserve empty non-quoted entries.
var splitOptions = StringSplitOptions.None;
//change to the below if empty entries should be removed
//var splitOptions = StringSplitOptions.None;
var line = "\"125\"|\"Bio Methyl\"|\"99991\"|\"OPT12\"|\"CB\"|\"1\"|\"12\"|\"5\"|\"23\"";
var result = line
    .Split(new[] { "|" }, splitOptions)
    .Select(p => p.Trim('\"'))
    .ToList();
Console.WriteLine(string.Join(", ", result));

Split(...)语句将输入拆分为包含

等部分的数组
{ \"99991\", \"OPT12\", ... };

p.Trim('\"')语句删除每个部分的前导和尾随引用。

答案 1 :(得分:1)

作为修剪的替代方法,如果您的值中没有",则可以在分割之前简单地清理输入。您可以将"符号替换为空(""string.Empty)。

之后,您的Split代码会提供正确的结果:

string uEList = "\"125\"|\"Bio Methyl\"|\"99991\"|\"OPT12\"|\"CB\"|\"1\"|\"12\"|\"5\"|\"23\"";
var eList = uEList.Replace("\"", string.Empty).Split(BarDelimiter);