web-dev-qa-db-fra.com

C # regex pour supprimer les caractères non imprimables et contrôler les caractères, dans un texte qui comprend un mélange de plusieurs langues différentes, des lettres unicode

j'apprécierais votre aide à ce sujet, car je ne sais pas quelle plage de caractères utiliser, ou s'il y a une classe de caractères comme [[: cntrl:]] que j'ai trouvée dans ruby?

au moyen de non imprimable, je veux dire supprimer tous les caractères qui ne sont pas affichés dans la sortie ie, lorsque l'on imprime la chaîne d'entrée. Attention, je cherche une regex c #, je n'ai pas de problème avec mon code

14
foksoho

Vous pouvez supprimer tous les contrôles et autres caractères non imprimables avec

s = Regex.Replace(s, @"\p{C}+", string.Empty);

Le \p{C} La classe de catégorie Unicode correspond à tous les caractères de contrôle, même ceux en dehors de la table ASCII car dans .NET, les classes de catégorie Unicode sont compatibles avec Unicode par défaut.

33
Wiktor Stribiżew

Vous pouvez essayer avec:

string s = "Täkörgåsmrgås";
s = Regex.Replace(s, @"[^\u0000-\u007F]+", string.Empty);

Documentation sur les caractères non imprimables: https://en.wikipedia.org/wiki/Control_character

Méthode Char.IsControl:

https://msdn.Microsoft.com/en-us/library/system.char.iscontrol.aspx

Vous pouvez peut-être essayer:

string input; // this is your input string
string output = new string(input.Where(c => !char.IsControl(c)).ToArray());
3
Yanga