我有一个类似于这个Hello [name] [lastname]
的字符串
然后我通过List<string> = "Hello [name] [lastname]".Split(" ").ToList()"
将其转换为list<string>
问题是,我需要将Hello [name] [lastname]
作为'Hello' name lastname
,并以此方式存储在列表中。
更改字符串的问题是,我无法想出一种方法,既可以删除[
和]
,又可以添加单个quoutes,而不必使用多个替换多次遍历字符串?
用一个命令就能做到吗?-比如定义一条规则?
您可以使用正则表达式来识别字符串中的单词和[标记]。然后在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();
将输出以下列表:
[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();
但是,我建议将此代码拆分为多行,而不是像您要求的那样使用单个命令。