Вы можете сделать это с помощью LINQ-решения вместо регулярного выражения:
string input = "123- abcd33";
string chars = new String(input.Where(c => c != '-' && (c < '0' || c > '9')).ToArray());
Быстрый тест производительности показывает, что это примерно в пять раз быстрее, чем при использовании регулярного выражения.