2010-11-15 28 views
1

Ecriture d'un utilitaire de fichier pour supprimer tous les caractères non-ASCII des fichiers. J'ai ce Regex:Remplacement de tous les caractères non-ASCII, à l'exception du caractère à angle droit, en C#

Regex rgx = new Regex(@"[^\u0000-\u007F]"); 

Qui fonctionne bien. Mais malheureusement, j'ai découvert que certaines personnes stupides utilisent des angles droits (¬) comme délimiteurs dans leurs fichiers, donc ceux-ci sont également supprimés, mais j'en ai besoin! Je suis assez nouveau à Regex, et je comprends les bases, mais toute aide serait génial!

Merci d'avance!

+0

** S'IL VOUS PLAÎT NE PAS FAIRE ÇA ** – tchrist

+0

@tchrist: pourquoi pas? –

+2

Parce que c'est [¡ɹʍuoɹʍ puɐ ⅂IɅƎ] (http://stackoverflow.com/questions/4174089/expression-normale-pour-langiner-les-couleurs-de-lignes/4174112#4174112), c'est pourquoi !!! – tchrist

Répondre

3

Vous avez juste besoin d'inclure le point de code pour l'équerre dans l'ensemble:

Essayez ceci:

Regex rgx = new Regex(@"[^\uxxxx\u0000-\u007F]"); 

Ou ceci:

Regex rgx = new Regex(@"[^\uxxxx-\uxxxx\u0000-\u007F]"); 

(où xxxx est le Unicode point de code pour le caractère que vous souhaitez conserver.)

La raison de donner deux options ici est que je sais que vous pouvez spécifier plusieurs plages dans un groupe de caractères négatifs, mais je ne sais pas si vous pouvez faire correspondre des caractères individuels avec des plages.

+0

Pourquoi ne pouviez-vous pas faire correspondre des caractères individuels dans des plages? Je ne connais aucun dialecte regex où cela ne fonctionnera pas, la conversion préalable de Java de '\ uXXXX' avant l'analyse lexicale. – tchrist

+0

J'ai essayé les deux, ainsi que le '|'. Je ne comprends vraiment pas pourquoi ça ne marche pas. C'est une application console si cela fait une différence? Mais je ne pense pas que ça devrait, les angles droits apparaissent simplement comme "?" sans le Regex appliqué, mais disparaître quand il est, donc il doit être dépouillé par le Regex. Confus! –

+1

@Nouveau, quand les choses apparaissent comme "?" caractères qui ne devraient pas, qui pointe toujours vers un problème d'encodage. Quelque part, quelque chose pense que votre texte est dans un encodage différent de ce qu'il est réellement. Habituellement, cela signifie que vous devez déclarer quel encodage vous utilisez réellement, car la valeur par défaut ne s'applique pas au texte en question. – tchrist

1

La réponse de Jon est absolument correcte. Vous utilisez peut-être le mauvais code pour le personnage. Essayez ce qui suit pour les caractères semblants semblables:

Regex regex = new Regex(@"([^\u00ac\u0000-\u007F])"); 
Regex regex = new Regex(@"([^\u02fa\u0000-\u007F])"); 
Regex regex = new Regex(@"([^\u031a\u0000-\u007F])"); 

Le premier devrait fonctionner je pense.