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