Реальный базовый пример с регулярным выражением:
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
Поскольку вам удалось добавить свои собственные выражения для целых чисел и чисел с плавающей точкой, я предполагаю, что вы понимаете, как каждое из отдельных регулярных выражений соответствует их соответствующим частям. Это выглядит немного пугающе, когда вы объединяете все эти выражения вместе с символом канала между ними.