繁体   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