Как узнать тип переменной из регулярного выражения?

После каждой "ячейки" (кроме ячеек с номерами) напишите тип данных этой ячейки.

    №       Серия       Наименование        Дополнение

    1       677492      12Тм_54         Допол

    1       Привет      76          1з

    7       654     Это         Твоё

    2       Тестовое    -=-=-=          СимволыИлиНет?

    0       Задание     ЉµЉ         1787_-_?

    2147483747  Удачи       На_полях        Правосудия 

Пример: 654 - short 76 - sbyte 1з - string

Пытался сделать это через регулярные выражения, получилось нечто вроде такого:

Regex regex = new Regex(@"(?<номер>\d+)\s{1,}(?<серия>(\S+|[_]))\s{1,}(?<наименование>(\S+|[_]))\s{1,}(?<дополнение>(\S+|[_]))");

            foreach (var str in updatestr)
            {
                Console.WriteLine(Regex.Replace(str, regex.ToString(), "${номер}\t\t${серия}\t\t${наименование}\t\t${дополнение}"));
            }

Ну и собственно сам вопрос: как узнать тип данных у переменной из регулярного выражения (?<номер>\d+)?


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

Автор решения: luc1f

Спасибо комментатору @aepot за идею.

Regex regex = new Regex(@"(?<номер>\d+)\s{1,}(?<серия>(\S+|[_]))\s{1,}(?<наименование>(\S+|[_]))\s{1,}(?<дополнение>(\S+|[_]))");

            string[] smth = regex.GetGroupNames();
            foreach (var str in updatestr)
            {
                MatchCollection temp = regex.Matches(str);
                Match match = regex.Match(str);
                Console.WriteLine(Regex.Replace(str, regex.ToString(),
                    "${номер}\t\t${серия}-{0}\t\t${наименование}-{1}\t\t${дополнение}-{2}"),
                    ShowType(match.Groups["серия"].Value),
                    ShowType(match.Groups["наименование"].Value),
                    ShowType(match.Groups["дополнение"].Value));

            }
private static string ShowType(string str)
        {
            string myTypeStr = "string";
            if (long.TryParse(str, out _)) myTypeStr = "long";
            if (int.TryParse(str, out _)) myTypeStr = "int";
            if (short.TryParse(str, out _)) myTypeStr = "short";
            if (byte.TryParse(str, out _)) myTypeStr = "byte";
            return myTypeStr;
        }

Может код и кривой, но работает

→ Ссылка