web-dev-qa-db-ja.com

正規表現(.NET)と一致しない文字の置換/削除

文字列を検証するための正規表現があります。しかし、今度は正規表現に一致しないすべての文字を削除したいと思います。

例えば。

regExpression = @"^([\w\'\-\+])"

text = "This is a sample text with some invalid characters -+%&()=?";

//Remove characters that do not match regExp.

result = "This is a sample text with some invalid characters -+";

RegExpressionを使用して有効な文字を判別し、他のすべての文字を削除する方法についてのアイデア。

どうもありがとう

14
tif

これ(文字をホワイトリストに登録し、他のすべてを置き換える)を1行で実行できると思います。

var result = Regex.Replace(text, @"[^\w\s\-\+]", "");

技術的には、次のように生成されます。「これは、いくつかの無効な文字-+を含むサンプルテキストです」これは、例とは少し異なります(-と+の間の余分なスペース)。

15
emfurry

そのような単純な:

var match = Regex.Match(text, regExpression);
string result = "";
if(match.Success)
    result = match.Value;

一致しない文字を削除することは、一致する文字を保持することと同じです。それが私たちがここで行っていることです。

式がテキスト内で複数回一致する可能性がある場合は、次を使用できます。

var result = Regex.Matches(text, regExpression).Cast<Match>()
                  .Aggregate("", (s, e) => s + e.Value, s => s);
11
Daniel Hilgarth

おかげで 一致しない場合は文字を置き換えます 私が作成した答え 受け入れられない文字を取り除くヘルパーメソッド

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

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

static public string RemoveNonAlphanumericCharacters( this string text)
              {
                      var result = text.ReplaceNotExpectedCharacters(NonAlphaNumericCharacters, "" );
                      return result;
              }
        public const string NonAlphaNumericCharacters = "[a-zA-Z0-9]";
1