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

C# 如何在某些元素之间组合列表元素,c#,string,parsing,input,split,C#,String,Parsing,Input,Split,我有一个输入字符串://CommandName“Hello this World”(5,4,3) 我使用Split从该输入中获取所有条目,并将其全部存储在列表中。 List<String> s = input.Split().ToList(); List s=input.Split().ToList(); 如何组合以“”开头和结尾的元素之间的所有元素 矢量坐标也一样?例如(2,5,8)。 因此,将以(开头,以结尾)开头的元素之间的所有元素组合起来。 我应该为此使用正则表达式吗?一

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

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

List<String> s = input.Split().ToList();
List s=input.Split().ToList();
如何组合以“”开头和结尾的元素之间的所有元素

矢量坐标也一样?例如
(2,5,8)
。 因此,将以
开头,以
结尾)开头的元素之间的所有元素组合起来。


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

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

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

由于您成功地为integer和float添加了自己的表达式,我假设您了解每个正则表达式如何匹配各自的部分。如果您将所有这些表达式与中间的管道符号组合在一起,这看起来有点令人生畏。

请标记一种语言。嘿,对不起,我正在使用c#。我更新了任务在字符串参数中使用括号是合法的,
“Hello(test)example”
,(我想是),在括号中使用引号是合法的,
(“5”、“6”、“7”)
?我会为此选择数组。您可以对字符进行迭代,然后将它们收集/组合到另一个数组或列表中。这使您能够控制字符的索引。带有捕获组的正则表达式可能适用于此谢谢!这不会真正起作用,因为输入可能不同,例如
//CommandName“某些文本“5错误(1、2、3)
。也可能有不同的条目,如布尔值、整数或单个等,并且所有条目的顺序都不同。所以我想知道是否有一种模式可以找到所有由空格分隔的匹配项,并忽略字符之间的空格,如引号或括号?我不太擅长正则表达式模式。就在不久前,我们开始研究正则表达式。是的,您可以有一个模式来匹配所有不同类型的参数,并且您可以重复捕获该模式(这可以在一个正则表达式中完成)。然后在代码中,您必须检查它匹配的组,以确定应该如何解析它<代码>“(?[^]+)((?(?(?真|假);(?\”[^\“]+\”)*”。我命名了捕获组以便于访问,因此您可以调用
match.groups[“command”]
等来迭代参数,
foreach(match.groups[“parameter”]中的var capture.capture)
您的示例非常好!谢谢:)我添加了两种数据类型,整数(
“(?[+-]?[0-9][0-9]*)”
)和浮点,尽管我对浮点有一些问题。
“(?[-+]?[0-9]*\。?[0-9]+([eE][-+]?[0-9]+))“
它给了我一个错误,上面写着
无法识别的转义序列
这个错误发生在模式中的
\。
。作为一个十足的傻瓜,说到正则表达式,我对这整件事有点困惑。从性能角度来看,这是一个好的选择吗?这就是目前整个模式的样子:
var模式=新的正则表达式((?[^]+)((?(?)(?(?)真的(假);(?[+-]?[0-9][0-9]*)(?[-+]?[0-9]*。?[0-9]+([eE][-+]?[0-9]+)))(?)(?“[^+\”)+)+)(?“[^+\”)*)(?”)(?\(?\)+)*);当它看起来有点吓人的时候,我看不懂:

(?<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