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);
Другие вопросы по тегам