Как объединить элементы списка между определенными элементами - PullRequest
0 голосов
/ 05 марта 2019

У меня есть строка ввода: //CommandName "Hello this World" (5, 4, 3)

Я использую Split для получения всех записей из этого ввода и сохраняю все это в списке.

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

КакМогу ли я объединить все элементы, которые находятся между элементами, которые начинаются и заканчиваются на "" "?

Также то же самое для векторных координат? например, (2, 5, 8).( и заканчивается ).

Должен ли я использовать Regex для этого?

1 Ответ

1 голос
/ 05 марта 2019

Реальный базовый пример с регулярным выражением:

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

Поскольку вам удалось добавить свои собственные выражения для целых чисел и чисел с плавающей точкой, я предполагаю, что вы понимаете, как каждое из отдельных регулярных выражений соответствует их соответствующим частям. Это выглядит немного пугающе, когда вы объединяете все эти выражения вместе с символом канала между ними.

...