It follows a simple method I did where it keeps only numbers and letters without accents, and removes all possible special characters.
public static string ObterStringSemAcentosECaracteresEspeciais(string str)
{
/** Troca os caracteres acentuados por não acentuados **/
string[] acentos = new string[] { "ç", "Ç", "á", "é", "í", "ó", "ú", "ý", "Á", "É", "Í", "Ó", "Ú", "Ý", "à", "è", "ì", "ò", "ù", "À", "È", "Ì", "Ò", "Ù", "ã", "õ", "ñ", "ä", "ë", "ï", "ö", "ü", "ÿ", "Ä", "Ë", "Ï", "Ö", "Ü", "Ã", "Õ", "Ñ", "â", "ê", "î", "ô", "û", "Â", "Ê", "Î", "Ô", "Û" };
string[] semAcento = new string[] { "c", "C", "a", "e", "i", "o", "u", "y", "A", "E", "I", "O", "U", "Y", "a", "e", "i", "o", "u", "A", "E", "I", "O", "U", "a", "o", "n", "a", "e", "i", "o", "u", "y", "A", "E", "I", "O", "U", "A", "O", "N", "a", "e", "i", "o", "u", "A", "E", "I", "O", "U" };
for (int i = 0; i < acentos.Length; i++)
{
str = str.Replace(acentos[i], semAcento[i]);
}
/** Troca os caracteres especiais da string por "" **/
string[] caracteresEspeciais = { "¹", "²", "³", "£", "¢", "¬", "º", "¨", "\"", "'", ".", ",", "-", ":", "(", ")", "ª", "|", "\\\\", "°", "_", "@", "#", "!", "$", "%", "&", "*", ";", "/", "<", ">", "?","[", "]", "{", "}", "=", "+", "§" ,"´", "`", "^", "~" };
for (int i = 0; i < caracteresEspeciais.Length; i++)
{
str = str.Replace(caracteresEspeciais[i], "");
}
/** Troca os caracteres especiais da string por " " **/
str = Regex.Replace(str, @"[^\w\.@-]", " ",
RegexOptions.None, TimeSpan.FromSeconds(1.5));
return str.Trim();
}
Oops, just to point out the class
\W
(any character other than a word). Fountain: MSDN– Anthony Accioly
The @Cigano response is also what I would do: just be sure to include a " " so that spaces are also accepted.
– Charles Roberto Canato
\W
will marry .^0-9a-zA-Z
does not match accented characters. Only regex I see for that would be a denied list including accented characters.– gmsantos
It works very well, thank you all!
– Angelo Reis