Si prega di vedere questo "clbuttic" (o per il vostro caso cl [censurato] IC) articolo prima di fare una stringa sostituire senza considerare i confini di parola:
http://www.codinghorror.com/blog/2008/10/obscenity-filters-bad-idea-or-incredibly-intercoursing-bad-idea.html
Aggiornamento
non
Ovviamente infallibile (vedi articolo sopra - questo approccio è così facile da aggirare o produrre falsi positivi ...) o ottimizzato (le espressioni regolari dovrebbero essere memorizzate nella cache e compilate), ma quanto segue filtra le parole intere (senza "clbuttics") e semplici plurali di parole:
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);
Dà l'output:
ho avuto nessun [Censored] sonno per [Censored] giorni [Censored] - il vicino di casa sta giocando la musica classica a tutta velocità!
Si noti che "classico" non diventa "cl [Censored] ical", poiché le parole intere sono abbinate all'espressione regolare.
Update 2
E per dimostrare un sapore di come questo (e in generale stringa \ modello di base delle tecniche di corrispondenza) può essere facilmente sovvertito, vedere la seguente stringa:
"I' Non ho avuto il sonno del cranberry per i giorni di chuffıng chuffıngs - il vicino di casa sta suonando musica classica a pieno ritmo! "
Ho sostituito le "i" con la lettera minuscola turca non regolata "ı". Sembra ancora abbastanza offensivo!
fonte
2010-07-27 09:01:50
Probabilmente non è una buona idea aggiorna/inserisci le stringhe censurate senza conservare una copia della stringa non censurata. Molto probabilmente dovrai adattare la tua lista di parole e la strategia di sostituzione per molte iterazioni fino a quando non sarà "abbastanza giusto" e non rischiare di distruggere i tuoi dati nel frattempo –
Ti ha dato un voto solo per chiamarli "Parole cattive". – Chris