web-dev-qa-db-ja.com

一致しない場合は文字を置き換える

不正な文字を削除する正規表現を探しています。でも、キャラクターがどうなるかわかりません。

例えば:

プロセスで、文字列を([a-zA-Z0-9/-]*)と一致させたい。だから私は一致しない上記の正規表現のすべての文字を置き換えたいと思います。

29
LarZuK

それは:

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

[^ ]文字クラスの先頭でそれを否定します-それはクラスにない文字と一致します。

参照: 文字クラス

45
Kobi

Kobi の回答のおかげで 受け入れられない文字を取り除くヘルパーメソッド を作成しました。

許可されるパターンは正規表現形式である必要があります。角かっこで囲む必要があります。関数は、squereブラケットを開いた後にチルダを挿入します。有効な文字セットを記述するすべてのRegExでは機能しないと思いますが、使用している比較的単純なセットで機能します。

               /// <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
              }