Разбиение текста в две коллекции по типу данных?

Есть задача - разбить текст по двум коллекциям: в первую нужно перенести только численные значения, во вторую - перенести каждый атрибут без пробела.

string strophe_template = "11А 9Б 11А 9Б 11А 9Б 11А 9Б 11А 9Б 11А 9Б"

По итогу содержание коллекций должно быть следующим:

Первая коллекция

[11 9 11 9 11 9 11 9 11 9 11 9]

Вторая коллекция

[11А 9Б 11А 9Б 11А 9Б 11А 9Б 11А 9Б 11А 9Б]

Соответственно возникает вопрос как это сделать?


Ответы (3 шт):

Автор решения: Faraday
string strophe_template = "11А 9Б 11А 9Б 11А 9Б 11А 9Б 11А 9Б 11А 9Б";
    
string[] parts = strophe_template.Split(' ');

var numbersCollection = parts.Where(p => int.TryParse(p, out _)).Select(int.Parse).ToList();
var attributesCollection = parts.Where(p => !int.TryParse(p, out _)).ToList();
→ Ссылка
Автор решения: DmitriySidyakin

Бесплатная книга по .NET и C#: Книга по C#

Киниги по Экосистеме C#: https://metanit.com/sharp/

Сайт обучения Microsoft: https://learn.microsoft.com/ru-ru/dotnet/csharp/

    string strophe_template = "11А 9Б 11А 9Б 11А 9Б 11А 9Б 11А 9Б 11А 9Б";

    // Вторая коллекция:
    var second_collection = strophe_template.Split(' ');

    // Первая коллекция:
    var first_collection = second_collection.Select(code => code.Replace(code.Last().ToString(), ""));

    // Если нужно конвертировать в целые:
    // TODO: Удалить если не нужно:
    var second_collectionByte = second_collection.Select(code => byte.Parse(code));
→ Ссылка
Автор решения: aepot

Очень легко с помощью регулярок делается.

static void Main(string[] args)
{
    string strophe_template = "11А 9Б 11А 9Б 11А 9Б 11А 9Б 11А 9Б 11А 9Б";
    var matches = Regex.Matches(strophe_template, @"(\d+)\w+");

    string[] first = matches.Select(m => m.Groups[1].Value).ToArray();
    string[] second = matches.Select(m => m.Groups[0].Value).ToArray();

    Console.WriteLine(string.Join(" ", first));
    Console.WriteLine(string.Join(" ", second));
}

Вывод в консоль

11 9 11 9 11 9 11 9 11 9 11 9
11А 9Б 11А 9Б 11А 9Б 11А 9Б 11А 9Б 11А 9Б
→ Ссылка