正则表达式中的否定字符

时间:2009-11-19 12:48:50

标签: regex regex-negation

我如何编写符合以下条件的正则表达式?

  • 没有数字
  • 没有特殊字符
  • 没有空格

字符串

5 个答案:

答案 0 :(得分:64)

字符类[^]中的插入符号是大多数正则表达式实现(Perl,.NET,Ruby,Javascript等)常用的否定操作符。所以我会这样做:

[^\W\s\d]
  • ^ - 匹配不在角色类
  • 中的任何内容
  • \ W - 匹配非单词字符(单词字符将被定义为a-z,A-Z,0-9和下划线)。
  • \ s - 匹配空格(空格,制表符,回车符,换行符)
  • \ d - 匹配0-9

或者你可以通过简单地只包括你想要的东西来采取另一种方法:

[A-Za-z]

这里的主要区别是第一个将包括下划线。那,它展示了一种用您正在思考的相同术语编写表达式的方法。但是如果你反过来想要包含字符而不是排除它们,那么这有时会导致更容易阅读正则表达式。

我不完全清楚你不想要哪些特殊字符。但是我写了两个解决方案,以防万一你的工作比另一个好。

答案 1 :(得分:2)

在Perl中,它将类似于:

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

当然,这取决于你对“特殊字符”的定义。 \W匹配所有非单词字符。单词字符是任何字母数字字符加空格字符。

答案 2 :(得分:0)

了解正则表达式最重要的不是它们的语法,而是能够清楚地解释您正在寻找的内容。这确实是问题的90% 此外,通常更好地陈述您想要的而不是您不想要的东西。

答案 3 :(得分:0)

尝试^ [^ 0-9 \ p {P}] $

答案 4 :(得分:-9)

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

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

string replacement = "";

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