Символы отрицания в регулярном выражении - PullRequest
31 голосов
/ 19 ноября 2009

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

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

в строке

Ответы [ 5 ]

66 голосов
/ 19 ноября 2009

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

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

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

[A-Za-z]

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

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

2 голосов
/ 19 ноября 2009

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

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

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

0 голосов
/ 16 июня 2014
var StringInputToClean = @"[:(M)?*a',\y<>&a#~%{}+.@\\ /27!;$+]";

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

string replacement = "";

var result = Regex.Replace(StringInputToClean, pattern, replacement);
0 голосов
/ 19 ноября 2009

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

0 голосов
/ 19 ноября 2009

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

...