Подтвердить что ты не робот

Отрицать символы в регулярном выражении

Как мне написать регулярное выражение, которое соответствует следующим критериям?

  • Нет номеров
  • Нет специальных символов
  • Без пробелов

в строке

4b9b3361

Ответ 1

Карет внутри класса символов [^] является оператором отрицания, общим для большинства реализаций регулярных выражений (Perl,.NET, Ruby, Javascript и т.д.). Поэтому я бы сделал это следующим образом:

[^\W\s\d]
  • ^ - Соответствует чему-либо НЕ в классе символов
  • \W - соответствует несловным символам (символ слова будет определяться как a-z, A-Z, 0-9 и подчеркивание).
  • \s - соответствует пробелу (пробел, табуляция, возврат каретки, строка)
  • \d - соответствует 0-9

Или вы можете использовать другой подход, просто включив только то, что вы хотите:

[A-Za-z]

Основное отличие здесь состоит в том, что первый будет включать символы подчеркивания. Это и демонстрирует способ написания выражения в тех же терминах, о которых вы думаете. Но если вы меняете, вы думаете включить символы вместо их исключения, тогда это может привести к более легкому для чтения регулярному выражению.

Мне не совсем понятно, какие специальные символы вам не нужны. Но я написал оба решения на случай, если для вас лучше, чем другого.

Ответ 2

В Perl это будет что-то вроде:

$string !~ /[\d \W]/

Конечно, это зависит от вашего определения "специальных символов". \W соответствует всем несловным символам. Символом слова является любой буквенно-цифровой символ плюс символ пробела.

Ответ 3

Самое главное, чтобы узнать о регулярных выражениях, это не их синтаксис, а способность четко объяснять, что вы ищете. Это действительно 90% проблемы.
Кроме того, обычно лучше указать, что вы хотите, а не то, что вы не хотите.

Ответ 4

Попробуйте ^ [^ 0-9\p {P}] $

Ответ 5

var StringInputToClean = @"[:(M)?*a',\y<>&a#~%{}[email protected]\\ /27!;$+]";

var pattern = @"[^a-zA-Z0-9\s]";

string replacement = "";

var result = Regex.Replace(StringInputToClean, pattern, replacement);