如何在某些元素之间组合列表元素

时间:2019-03-05 18:46:47

标签: c# string parsing input split

我有一个输入字符串://CommandName "Hello this World" (5, 4, 3)

我使用Split从此输入中获取所有条目,并将其全部存储在列表中。

List<String> s = input.Split().ToList();

如何合并以'“'开头和结尾的元素之间的所有元素?

向量坐标也一样吗?例如(2, 5, 8)。 因此,请合并以(开头和以)结尾的元素之间的所有元素。

我应该为此使用正则表达式吗?

1 个答案:

答案 0 :(得分:1)

带有正则表达式的真实基本示例:

var pattern = new Regex("([^ ]+) \"([^\"]+)\" \\(([^)]+)\\)");
var match = pattern.Match("command \"string\" (0, 1, 2)");
var command = match.Groups[1];
var text = match.Groups[2];
var location = match.Groups[3];

Console.WriteLine(command);
Console.WriteLine(text);
Console.WriteLine(location);

此示例假定您将始终拥有相同数量,相同类型的参数,并且不处理字符串中的引号,但可以使您了解如何使用正则表达式来实现。

正则表达式的解释

(?<command>[^ ]+)                                  The first sequence of characters up to a space
( (?<parameter>...))*                              Zero or more parameters, separated by a space

parameter捕获组的表达式为以下任意值:

(?<boolean>true|false)                             A boolean literal
(?<integer>[+-]?[0-9][0-9]*)                       An integer literal
(?<float>[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?)   A floating point literal
(?<string>\"[^\"]+\")                              A string literal
(?<vector>\\([^)]+\\))                             A vector literal

由于您设法为整数和浮点数添加了自己的表达式,因此我假设您了解每个正则表达式如何与它们各自的部分匹配。一旦将所有这些表达式以及两者之间的管道符号结合在一起,它看起来就有些令人生畏。