Ir para o conteúdo

Retirar acentos de um texto

Introdução

Por vezes caracteres com acentos ou alguns caracteres especiais podem dar uma dor de cabeça quando se usa codificações que não os suportam. Neste pequeno tutorial é dado um exemplo de como retirar acentos / caracteres especiais de um texto utilizando Regular Expressions (Regex).

Exemplo

Começamos por definir 2 arrays, um que contêm os caracteres normalizados e outro que contêm as expressões regulares para a posterior substituição:

Dim cLetters() As String = {"a", "e", "i", "o", "u", "c", "n", "A", "E", "I", "O", "U", "C", "N"}
Dim regexPatterns() As String = {"(à|á|â|ã){1}", "(è|é|ê){1}", "(ì|í|î){1}", "(ò|ó|ô|õ){1}", "(ù|ú|û){1}", "ç{1}", "ñ{1}", "(À|Á|Â|Ã){1}", "(È|É|Ê){1}", "(Ì|Í|Î){1}", "(Ò|Ó|Ô|Õ){1}", "(Ù|Ú|Û){1}", "Ç{1}", "Ñ{1}"}

De seguida fazemos um ciclo em que são substituídos os caracteres definidos nos arrays:

For index As Integer = 0 To cLetters.Length - 1
        sText = System.Text.RegularExpressions.Regex.Replace(sText, regexPatterns(index), cLetters(index))
Next

E já temos o nosso texto limpo.

Função completa:

Private Function cleanText(ByVal sText As String) As String
    'Arrays com as letras normalizadas e as expressões regulares 
    'Têm de ter o mesmo tamanho
    Dim cLetters() As String = {"a", "e", "i", "o", "u", "c", "n", "A", "E", "I", "O", "U", "C", "N"}
    Dim regexPatterns() As String = {"(à|á|â|ã){1}", "(è|é|ê){1}", "(ì|í|î){1}", "(ò|ó|ô|õ){1}", "(ù|ú|û){1}", "ç{1}", "ñ{1}", "(À|Á|Â|Ã){1}", "(È|É|Ê){1}", "(Ì|Í|Î){1}", "(Ò|Ó|Ô|Õ){1}", "(Ù|Ú|Û){1}", "Ç{1}", "Ñ{1}"}

    'São substituídos todos os caracteres num ciclo
    For index As Integer = 0 To cLetters.Length - 1
        sText = System.Text.RegularExpressions.Regex.Replace(sText, regexPatterns(index), cLetters(index))
    Next

    Return sText
End Function

Para usar esta função basta fazer (por exemplo):

Dim texto as string = "Esta é a previsão de como irá ficar o conteúdo do documento se clicar no botão"
Dim textoLimpo as string = cleanText(texto)

E vamos ficar com o textoLimpo igual a "Esta e a previsao de como ira ficar o conteudo do documento se clicar no botao".