Я добавляю фильтр ненормативной лексики, и я хотел бы заменить слово (или частичное слово), которое заменяется строкой равной длины. В равной части длины я испытываю трудности.
Таким образом, если заменяемое слово имеет длину 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);
до
return regex.Replace(text, Censored);