Como remover todos os caracteres de uma string, exceto letras, números e hífen, em C#?
Solução com expressão regular
Sua tarefa é resolvida de forma muito simples com o padrão [^a-zA-Zа-яА-Я0-9 -]:
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string input = "Hello-World! How are you? (test) 123-456 #2024";
string pattern = @"[^a-zA-Zа-яА-Я0-9 -]";
string result = Regex.Replace(input, pattern, "");
Console.WriteLine(result);
// Output: Hello-World How are you test 123-456 2024
}
}
Observe que o padrão inclui:
a-zA-Z- letras latinasа-яА-Я- letras cirílicas0-9- dígitos(espaço) - para preservar espaços-- hífen
O acento circunflexo ^ dentro dos colchetes nega a seleção, removendo tudo que não está na lista.
Alternativa com IsLetterOrDigit e Unicode
Se você quiser evitar problemas com codificação de caracteres cirílicos, pode usar a abordagem baseada em Unicode:
using System;
using System.Linq;
class Program
{
static void Main()
{
string input = "Hello-World! How are you? (test) 123-456 #2024";
var allowedChars = input.Where(c =>
char.IsLetter(c) ||
char.IsDigit(c) ||
c == '-' ||
c == ' '
).ToArray();
string result = new string(allowedChars);
Console.WriteLine(result);
}
}
Este método automaticamente reconhece letras de qualquer alfabeto (incluindo cirílico) através de char.IsLetter, além de dígitos, hífen e espaço.
Tags: C#, strings, expressões regulares, limpeza de strings
No answers yet.
Faça login para deixar uma resposta