A maneira mais eficaz de remover caracteres especiais em C# é utilizando expressões regulares (Regex). O Regex permite definir padrões específicos que podem ser usados para identificar e substituir caracteres indesejados em uma string. Neste post, aprenda como remover caracteres especiais de uma string em C#.

Remoção de caracteres especiais com Regex

using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        string texto = "Olá, mundo! Este é um exemplo @de# texto com* caracteres (especiais) %!";
        
        // Regex para remover todos os caracteres que não sejam letras ou números
        string resultado = Regex.Replace(texto, @"[^a-zA-Z0-9\s]", "");

        Console.WriteLine(resultado);  // Saída: "Olá mundo Este é um exemplo de texto com caracteres especiais"
    }
}

Explicação:

  • O padrão [^a-zA-Z0-9\s] identifica todos os caracteres que não são letras (maiúsculas e minúsculas), números ou espaços em branco;

  • Regex.Replace() substitui todos os caracteres correspondentes ao padrão por uma string vazia (""), efetivamente removendo-os.

Esse método é muito versátil e pode ser ajustado para remover apenas tipos específicos de caracteres, como pontuações, acentos, ou símbolos personalizados.

Remover caracteres especiais específicos com String.Replace()

Se você quiser remover caracteres específicos e conhecidos de uma string, você pode usar o método String.Replace() repetidamente para cada caractere especial que deseja remover.

Exemplo de remoção de caracteres específicos:

using System;

class Program
{
    static void Main()
    {
        string texto = "Olá, mundo! Exemplo @de# texto.";

        // Removendo caracteres específicos
        texto = texto.Replace("@", "")
                     .Replace("#", "")
                     .Replace(",", "")
                     .Replace("!", ".");

        Console.WriteLine(texto);  // Saída: "Olá mundo. Exemplo de texto."
    }
}

Explicação:

  • O método Replace() substitui o caractere indesejado pelo que for especificado (neste caso, uma string vazia para remover os caracteres);

  • Esse método é útil quando você tem uma lista limitada e conhecida de caracteres que precisa remover ou substituir.

Remover caracteres especiais e acentos com Normalize()

Se além de caracteres especiais, você também deseja remover acentos (ou normalizar o texto), uma maneira prática é usar o método Normalize() em conjunto com Regex para remover caracteres acentuados e convertê-los em suas formas equivalentes simples (por exemplo, “é” se torna “e”).

Exemplo de remoção de acentos e caracteres especiais:

using System;
using System.Text;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        string texto = "Olá, Mundo! Coração, Café, Árvore.";
        
        // Normaliza os caracteres para sua forma básica
        string textoNormalizado = texto.Normalize(NormalizationForm.FormD);

        // Remove caracteres não ASCII (acentos)
        string textoSemAcentos = Regex.Replace(textoNormalizado, @"\p{IsCombiningDiacriticalMarks}+", "");

        // Remove caracteres especiais
        string resultado = Regex.Replace(textoSemAcentos, @"[^a-zA-Z0-9\s]", "");

        Console.WriteLine(resultado);  // Saída: "Ola Mundo Coracao Cafe Arvore"
    }
}

Explicação:

  • Normalize() converte os caracteres acentuados em uma forma composta, onde o acento é tratado como um caractere separado;

  • \p{IsCombiningDiacriticalMarks} é uma classe especial de Regex que remove os sinais diacríticos (acentos) de letras;

  • Após a normalização, Regex.Replace() é usado novamente para remover outros caracteres especiais, como pontuação.

Remover caracteres especiais usando LINQ

Outra abordagem interessante é usar LINQ para filtrar caracteres da string, permitindo a remoção de caracteres que não correspondam ao que você deseja manter.

Exemplo de Remoção com LINQ:

using System;
using System.Linq;

class Program
{
    static void Main()
    {
        string texto = "Texto! Com caracteres: especiais & números (123).";
        
        // Mantém apenas letras, números e espaços
        string resultado = new string(texto.Where(c => char.IsLetterOrDigit(c) || char.IsWhiteSpace(c)).ToArray());

        Console.WriteLine(resultado);  // Saída: "Texto Com caracteres especiais números 123"
    }
}

Explicação:

  • char.IsLetterOrDigit() verifica se o caractere é uma letra ou número;

  • char.IsWhiteSpace() permite manter os espaços em branco;

  • Where() filtra a string mantendo apenas os caracteres que atendem aos critérios e transforma a sequência em uma nova string.

Essa abordagem oferece flexibilidade para remover diferentes tipos de caracteres com facilidade.

Remover caracteres especiais de uma string em C# pode ser feito de várias maneiras, dependendo das suas necessidades específicas.

O uso de Regex é a abordagem mais versátil e poderosa, enquanto o Replace() e LINQ oferecem alternativas simples para situações mais controladas. Se você estiver lidando com acentos, a normalização da string é essencial para garantir uma limpeza completa.

Aprenda do zero ou aprimore seus conhecimentos em C#. Domine os conceitos de Orientação a Objetos e crie sistemas complexos integrados com banco de dados.

CONHEÇA O CURSO COMPLETO DE C# COM + DE 100 AULAS PRÁTICAS. Tenha acesso vitalício e certificado de conclusão.

CLIQUE NA IMAGEM ABAIXO E CONFIRA MAIS DETALHES:

CLIQUE AQUI E SAIBA MAIS

Dúvidas ou sugestões sobre como remover caracteres especiais de uma string em C#? Deixem nos comentários! Para mais dicas, acesse o nosso canal no YouTube:
 https://youtube.com/criandobits

Tags:

Quer receber GRÁTIS o e-book "Como Formatar um Computador em 5 Minutos"?

Não enviamos spam. Seu e-mail está 100% seguro!

Sobre o Autor

Bene Silva Júnior
Bene Silva Júnior

Bacharel em Sistemas de Informação pelo Instituto Paulista de Pesquisa e Ensino IPEP. Apaixonado por tecnologias e games do tempo da vovó!

0 Comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *