web-dev-qa-db-fra.com

Remplacer les caractères s'ils ne correspondent pas

Je recherche une expression régulière qui supprime les caractères illégaux. Mais je ne sais pas quels seront les personnages.

Par exemple:

Dans un processus, je veux que ma chaîne corresponde à ([a-zA-Z0-9/-]*). Je voudrais donc remplacer tous les caractères qui ne correspondent pas l'expression rationnelle ci-dessus.

29
LarZuK

Ce serait:

[^a-zA-Z0-9/-]+

[^ ] au début d'une classe de caractères la nie - elle correspond à des caractères qui ne sont pas dans la classe.

Voir aussi: Classes de caractères

45
Kobi

Grâce à la réponse de Kobi , j'ai créé une méthode d'aide pour supprimer les caractères non acceptés .

Le modèle autorisé doit être au format Regex, attendez-vous à ce qu'il soit placé entre crochets. Une fonction insérera un tilde après avoir ouvert le crochet carré. Je prévois que cela pourrait ne pas fonctionner pour tous les RegEx décrivant des jeux de caractères valides, mais cela fonctionne pour des jeux relativement simples que nous utilisons.

               /// <summary>
               /// Replaces  not expected characters.
               /// </summary>
               /// <param name="text"> The text.</param>
               /// <param name="allowedPattern"> The allowed pattern in Regex format, expect them wrapped in brackets</param>
               /// <param name="replacement"> The replacement.</param>
               /// <returns></returns>
               /// //        https://stackoverflow.com/questions/4460290/replace-chars-if-not-match.
               //https://stackoverflow.com/questions/6154426/replace-remove-characters-that-do-not-match-the-regular-expression-net
               //[^ ] at the start of a character class negates it - it matches characters not in the class.
               //Replace/Remove characters that do not match the Regular Expression
               static public string ReplaceNotExpectedCharacters( this string text, string allowedPattern,string replacement )
              {
                     allowedPattern = allowedPattern.StripBrackets( "[", "]" );
                      //[^ ] at the start of a character class negates it - it matches characters not in the class.
                      var result = Regex.Replace(text, @"[^" + allowedPattern + "]", replacement);
                      return result; //returns result free of negated chars
              }