Как достать числовые значения из строки?

Имеется строка MoreValue|Value10|Product40. Мне нужно получить две переменные. Например: int value = 10; int id = 40; Помогите пожалуйста заранее благодарен.


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

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

Например так

string input = "MoreValue|Value10|Product40";
string[] tokens = input.Split('|');

List<int> numbers = new List<int>();
foreach(string token in tokens)
{
    if (int.TryParse(string.Concat(token.Where(c => char.IsDigit(c))), out int number))
        numbers.Add(number);
}

int value = numbers[0]; // 10
int id = numbers[1]; // 40

Или еще можно с помощью регулярного выражения

string input = "MoreValue|Value10|Product40";
var matches = Regex.Matches(input, @"\d+");
int value = int.Parse(matches[0].Value); // 10
int id = int.Parse(matches[1].Value); // 40
→ Ссылка
Автор решения: Alexander Petrov

В один проход без выделения дополнительной памяти:

ReadOnlySpan<char> input = "MoreValue|Value10|Product40";

for (int i = 0; i < input.Length; i++)
{
    if (char.IsDigit(input[i]))
    {
        int j;
        for (j = i + 1; j < input.Length && char.IsDigit(input[j]); j++)
        {
        }

        int number = int.Parse(input[i..j]);                                        
        Console.WriteLine(number); // помещаем в коллекцию и т. п.

        i = j;
    }
}
→ Ссылка