簡體   English   中英

如何在 linq 查詢中將字符替換或添加到字符串列表中?

[英]How to replace or prepend a character to a list of string in a linq query?

我有一個類似於這個Hello [name] [lastname]的字符串

然后我通過List<string> = "Hello [name] [lastname]".Split(" ").ToList()"將其轉換為list<string>

這個問題我需要Hello [name] [lastname]'Hello' name lastname並像這樣存儲在列表中。

更改字符串的問題是我無法想出一種方法,我既可以刪除[]也可以添加單個引號,而無需使用多次替換多次通過字符串到 go ?

是否可以使用單個命令來完成? - 比如定義規則?

您可以使用正則表達式來識別字符串中的單詞和 [tokens]。 然后在Regex.Replace中使用匹配評估器,您可以將自定義規則應用到用單引號括起來的單詞,並且對於標記,Regex 捕獲組已經為我們剝離了周圍的方括號。

例如,

var output = Regex
    .Replace("Hello [name] [lastname]", @"\[(?<token>.+?)\]|(?<word>[^\s]+)", (match) =>
    {
        var wordMatch = match.Groups["word"];
        if (wordMatch.Success) return $"'{wordMatch.Value}'";
        return match.Groups["token"].Value;
    })
    .Split(' ')
    .ToList();

將output列出如下:

[0] 'Hello'
[1] name
[2] lastname

如果您的輸入字符串始終以Hello開頭,那么解決方案將是:

List<string> output = new List<string>() { "'Hello'" }.Concat(input.Split(new char[] { '[', ' ', ']' }, StringSplitOptions.RemoveEmptyEntries).Skip(1)).ToList();

否則,如果您的輸入字符串的第一個單詞不固定,那么您可以這樣做:

List<string> output = new List<string>() { $"'{input.Split(' ')[0]}'" }.Concat(input.Split(new char[] { '[', ' ', ']' }, StringSplitOptions.RemoveEmptyEntries).Skip(1)).ToList();

但是,我建議將此代碼拆分為多行,而不是像您要求的那樣使用單個命令。

暫無
暫無

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

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