一个简单的String.Replace
将不起作用,因为它会删除单词部分。如果“sex”是一个被禁止的词,而你有“sextet”这个词,它没有被禁止,你应该保持原样。
使用Regex
您可以在文本中找到整个单词和短语
string text = "A sextet is a musical composition for six instruments or voices.".
string word = "sex";
var matches = Regex.Matches(text, @"(?<=\b)" + word + @"(?=\b)");
在这种情况下,matches 集合将为空。
您可以使用该Regex.Replace
方法
foreach (string word in bannedWords) {
text = Regex.Replace(text, @"(?<=\b)" + word + @"(?=\b)", "")
}
注意:我使用了以下Regex
模式
(?<=prefix)find(?=suffix)
其中 'prefix' 和 'suffix' 都是\b
,表示单词的开头和结尾。
如果您的禁止字词或短语可以包含特殊字符,则使用 . 转义它们会更安全Regex.Escape(word)
。
使用@zmbq 的想法,您可以创建一个Regex
模式一次
string pattern =
@"(?<=\b)(" +
String.Join(
"|",
bannedWords
.Select(w => Regex.Escape(w))
.ToArray()) +
@")(?=\b)";
var regex = new Regex(pattern); // Is compiled by default
然后将其重复应用于不同的文本
string result = regex.Replace(text, "");