Я добавляю фильтр ненормативной лексики, и я хотел бы заменить слово (или часть слова), которое заменено строкой равной длины. Часть равной длины - это то, где у меня возникают трудности.
Поэтому, если заменяемое слово имеет длину 3 символа, я хочу, чтобы текст, на который оно было заменено, имел длину 3 символа. Я не уверен, как я могу подстроить свою строку замены, чтобы она соответствовала длине заменяемого слова.
Вот мой метод тестирования:
public static string ProfanityFilter(this string text)
{
string pattern = @"\bword\b|\bword2\b|\banother*";
Regex regex = new Regex(pattern);
string replacement = "*%$@^!#@!@$^()!";
return regex.Replace(text, replacement);
}
Таким образом, если слово «другой» заменить, оно будет заменено на «*%$@^!#».
Если "слово" заменить, оно будет заменено на "*%$@^"
Если "формулировка" заменена, она будет заменена на "*%$@^ing"
Обновлять:
В итоге я нашел решение...
Я создал новый метод:
public static string Censored(Match match)
{
string replacement = "*%$@^!#@!@$^()!";
return replacement.Substring(0, match.Captures[0].Length);
}
Затем изменил
return regex.Replace(text, replacement);
to
return regex.Replace(text, Censored);
Substring
, вызовет исключение, если длина захвата превышает длину строки замены. Более безопасным способом было бы создать строку замены из набора разных символов, если вы действительно хотите, чтобы она состояла из всех этих разных символов. В противном случае вы можете указать один символ и создать его с помощью конструктораString
, как я показал в своем ответе. - person Ahmad Mageed   schedule 16.03.2011