Consulte este "clbuttic" (o para su caso cl [censurado] ic) del artículo antes de hacer una cadena sustituir sin tener en cuenta los límites de palabra:
http://www.codinghorror.com/blog/2008/10/obscenity-filters-bad-idea-or-incredibly-intercoursing-bad-idea.html
actualización
Obviamente no
infalible (consulte el artículo anterior: este enfoque es tan fácil de evitar o producir falsos positivos ...) u optimizado (las expresiones regulares deben almacenarse en caché y compilarse), pero lo siguiente filtrará palabras completas (no "clbuttics") y plurales simples de palabras:
const string CensoredText = "[Censored]";
const string PatternTemplate = @"\b({0})(s?)\b";
const RegexOptions Options = RegexOptions.IgnoreCase;
string[] badWords = new[] { "cranberrying", "chuffing", "ass" };
IEnumerable<Regex> badWordMatchers = badWords.
Select(x => new Regex(string.Format(PatternTemplate, x), Options));
string input = "I've had no cranberrying sleep for chuffing chuffings days -
the next door neighbour is playing classical music at full tilt!";
string output = badWordMatchers.
Aggregate(input, (current, matcher) => matcher.Replace(current, CensoredText));
Console.WriteLine(output);
proporciona la salida:
No he tenido [censurado] sueño durante días [censurado] [censurado] - el vecino de al lado está reproduciendo música clásica a toda velocidad!
Tenga en cuenta que "classical" no se convierte en "cl [Censored] ical", ya que las palabras completas se corresponden con la expresión regular.
Actualización 2
Y para demostrar una idea de cómo esto (y en la cadena \ patrón general de base técnicas de juego) puede ser subvertido fácilmente, ver la siguiente cadena:
"yo' No he dormido nada de arándano durante los días felices: ¡el vecino de al lado está tocando música clásica a toda velocidad! "
He reemplazado las "i" con mayúsculas indizadas "ı" 's. ¡Todavía parece bastante ofensivo!
Probablemente no sea una buena idea actualice/inserte las cadenas censuradas sin guardar una copia de la cadena sin censura. Lo más probable es que tenga que adaptar su lista de palabras y la estrategia de reemplazo para muchas iteraciones hasta que sea lo suficientemente correcto y no se arriesgue a destruir sus datos mientras tanto –
Le dimos un voto solo por llamarlos 'Palabras malas'. – Chris