簡體   English   中英

如何使用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"

因此,我檢查了以下兩個問題和答案: 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一定有更好的選擇吧?

這個怎么樣:

// 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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM