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