Если вы не хотите регулярных выражений, вот алгоритм:
Find the first -
LOOP {
Find the next -
If not found, break.
Check if the distance is 2
Check if the 8 characters surrounding the two minuses are digits
If so, found the number.
}
Не оптимально, но скорость сканирования уже будет зависеть от скорости кеша / памяти. Его можно оптимизировать, учитывая, в какой части матч провалился и как. Например, если у вас есть «123-4X-X ............», когда вы найдете X, вы знаете, что можете быстро пропустить. Второе - предшествующее X не может быть первым - правильного числа. Точно так же в «123--» вы знаете, что второе - не может быть первым - числа тоже.