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".