Заменить / удалить символы, которые не соответствуют регулярному выражению (.NET) - PullRequest
12 голосов
/ 27 мая 2011

У меня есть регулярное выражение для проверки строки. Но теперь я хочу удалить все символы, которые не соответствуют моему регулярному выражению.

* 1003 Е.Г. *

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 для определения допустимых символов и удаления всех остальных.

Большое спасибо

Ответы [ 3 ]

14 голосов
/ 27 мая 2011

Я полагаю, что вы можете сделать это (символы белого списка и заменить все остальное) в одну строку:

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

Технически это приведет к следующему: «Это образец текста с некоторыми недопустимыми символами - +», которыйнемного отличается от вашего примера (дополнительный пробел между - и +).

11 голосов
/ 27 мая 2011

Просто так:

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);
1 голос
/ 28 октября 2012

Благодаря Замените символы, если они не совпадают ответ, который я создал вспомогательный метод для удаления непринятых символов .

Допустимый шаблон должен быть в формате Regexожидайте, что они заключены в квадратные скобки.Функция вставит тильду после открытия скобки.Я предполагаю, что он может работать не для всех 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>
               /// //        /3373138/zamenit-simvoly-esli-oni-ne-sovpadayt.
               //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]";
...