我加入一個褻瀆濾波器和我想要做的就是替換的單詞(或部分字)這是替換爲等長的字符串。等長的部分是我遇到困難的地方。C#正則表達式替換
所以,如果被替換的單詞是長3個字符,比我想它與要長3個字符替換的文本。我不知道如何將替換字符串進行子串匹配以匹配被替換的單詞的長度。
這裏是我的測試方法:
public static string ProfanityFilter(this string text)
{
string pattern = @"\bword\b|\bword2\b|\banother*";
Regex regex = new Regex(pattern);
string replacement = "*%[email protected]^!#@[email protected]$^()!";
return regex.Replace(text, replacement);
}
所以,如果 「另一個」 被替換詞,將它與 「!*%$ @ ^#」 代替。
如果更換它會被替換成 「字」, 「*%$ @ ^」
如果 「措辭」 被替換,將用 「*%$ @^ing」 的
更新替換:
我最終找到解決方案...
我創建了一個新的方法:
public static string Censored(Match match)
{
string replacement = "*%[email protected]^!#@[email protected]$^()!";
return replacement.Substring(0, match.Captures[0].Length);
}
然後改變
return regex.Replace(text, replacement);
到
return regex.Replace(text, Censored);
要知道,你的新方法,使用'Substring',如果將拍攝長度超過了替換字符串的長度拋出異常。如果你真的希望它包含所有不同的字符,一個更安全的方法是從一組不同的字符中建立替換字符串。否則,您可以指定一個字符並使用String構造函數構建它,就像我在答案中所示的那樣。 – 2011-03-16 18:44:21
有趣的是看看發生了什麼「分配」。 – 2011-03-16 18:52:56
我知道,它可能會超過它,:)我還沒有完成有沒有在那裏進行檢查。 – GregInWI2 2011-03-17 21:50:11