C # Remover caracteres especiais

Eu quero remover todos os caracteres especiais de uma string. Os caracteres permitidos são A-Z (maiúsculas ou minúsculas), números (0-9), sublinhado (_), espaço em branco (), porcentagem (%) ou o sinal de ponto (.).

Eu tentei isso:

        StringBuilder sb = new StringBuilder();
        foreach (char c in input)
        {
            if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') | c == '.' || c == '_' || c == ' ' || c == '%')
            { sb.Append(c); }
        }
        return sb.ToString();

E isto

        Regex r = new Regex("(?:[^a-z0-9% ]|(?<=['\"])s)", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | RegexOptions.Compiled); 
        return r.Replace(input, String.Empty); 

Mas nada parece estar funcionando. Qualquer ajuda será apreciada

Obrigado

questionAnswers(7)

yourAnswerToTheQuestion