如何使用 LINQ 从定界字符串中获取带引号的字段作为未加引号的值列表?
How do I get quoted fields from a delimited string as a list of unquoted values using LINQ?
原文行为:
"125"|"Bio Methyl"|"99991"|"OPT12"|"CB"|"1"|"12"|"5"|"23"
预期的字符串列表没有双引号并且被 |
:
分割
125
Bio Methyl
99991
文本可能包含空引号字符串,如(以前的 "OPT12" 值现在为空 ""):
"125"|"Bio Methyl"|"99991"|""|"CB"|"1"|"12"|"5"|"23"
所以我检查了这两个问题和答案:QA1 and 得出我的解决方案。
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 一定有更好的地方吧?
这个怎么样:
// 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('\"')
语句从每个部分中删除前导和尾随引号。
作为修剪的替代方法,如果您的值中没有 "
,您可以在拆分之前简单地清理输入。您可以将 "
符号替换为空(""
或 string.Empty
)。
您的 Split
代码随后会给出正确的结果:
string uEList = "\"125\"|\"Bio Methyl\"|\"99991\"|\"OPT12\"|\"CB\"|\"1\"|\"12\"|\"5\"|\"23\"";
var eList = uEList.Replace("\"", string.Empty).Split(BarDelimiter);
原文行为:
"125"|"Bio Methyl"|"99991"|"OPT12"|"CB"|"1"|"12"|"5"|"23"
预期的字符串列表没有双引号并且被 |
:
125
Bio Methyl
99991
文本可能包含空引号字符串,如(以前的 "OPT12" 值现在为空 ""):
"125"|"Bio Methyl"|"99991"|""|"CB"|"1"|"12"|"5"|"23"
所以我检查了这两个问题和答案:QA1 and
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 一定有更好的地方吧?
这个怎么样:
// 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('\"')
语句从每个部分中删除前导和尾随引号。
作为修剪的替代方法,如果您的值中没有 "
,您可以在拆分之前简单地清理输入。您可以将 "
符号替换为空(""
或 string.Empty
)。
您的 Split
代码随后会给出正确的结果:
string uEList = "\"125\"|\"Bio Methyl\"|\"99991\"|\"OPT12\"|\"CB\"|\"1\"|\"12\"|\"5\"|\"23\"";
var eList = uEList.Replace("\"", string.Empty).Split(BarDelimiter);