C# регулярное выражение для удаления непечатаемых символов и управляющих символов в тексте, который состоит из множества разных языков, букв юникода
Я был бы признателен за вашу помощь в этом, так как я не знаю, какой диапазон символов использовать, или есть ли такой класс символов, как [[:cntrl:]], который я нашел в ruby?
с помощью непечатаемой формы я имею в виду удаление всех символов, которые не отображаются, т.е. выводятся, когда один печатает входную строку. Обратите внимание, я ищу aC# regex, у меня нет проблем с моим кодом
4 ответа
Вы можете удалить все управляющие и другие непечатные символы с помощью
s = Regex.Replace(s, @"\p{C}+", string.Empty);
\p{C}
Класс категории Unicode соответствует всем управляющим символам, даже за пределами таблицы ASCII, потому что в.NET классы категории Unicode по умолчанию поддерживают Unicode.
Вы можете попробовать с:
string s = "Täkörgåsmrgås";
s = Regex.Replace(s, @"[^\u0000-\u007F]+", string.Empty);
Обновленный ответ после комментариев:
Документация о непечатном символе: https://en.wikipedia.org/wiki/Control_character
Метод Char.IsControl:
https://msdn.microsoft.com/en-us/library/system.char.iscontrol.aspx
Может быть, вы можете попробовать:
string input; // this is your input string
string output = new string(input.Where(c => !char.IsControl(c)).ToArray());
вы можете попробовать это:
public static string TrimNonAscii(this string value)
{
string pattern = "[^ -~]*";
Regex reg_exp = new Regex(pattern);
return reg_exp.Replace(value, "");
}
Чтобы удалить все управляющие и другие непечатаемые символы
Regex.Replace(s, @"\p{C}+", String.Empty);
Чтобы удалить только управляющие символы (если вы не хотите удалять смайлики)
Regex.Replace(s, @"\p{Cc}+", String.Empty);