[英]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.