2009-11-18 75 views
5

请提供一个解决方案,在C#.NET中编写如下正则表达式: 我需要针对非字母(a到z; A到Z)的正则表达式,数字(0到9)。 意思是说,除了字母和其他数字(0到9)之外,获得正则表达式的反向方式。用于非字母和非数字的正则表达式

请提出相同的解决方案。

回答

17

您可以使用这里negated character class

[^a-zA-Z0-9] 

上述正则表达式匹配单个字符,不能是一个拉丁大写或小写字母或数字。

^在字符类([]之间的部分)开始否定完整的类,以便它匹配的不是普通字符类的行为在任何类不

为了让它有效的,你可能想其中的一个:

  1. 零个或多个这样的人物

    [^a-zA-Z0-9]* 
    

    星号(*)这里意味着前面的部分可以重复零或更多次。

  2. 一个或多个这种字符

    [^a-zA-Z0-9]+ 
    

    加号(+)这里意味着前述部分可以重复一次或多次。

  3. 一个完整的(可能为空)串,仅由这样的字符

    ^[^a-zA-Z0-9]*$ 
    

    这里字符^$具有含义anchors,分别匹配串的开始和结束。这可以确保整个字符串由不在该字符类中的字符组成,并且在其之前或之后不会有其他字符。

  4. 一个完整的(非空)字符串,仅由这些字符

    ^[^a-zA-Z0-9]+$ 
    

阐述了一下,这不会(和不能够)确保你不会使用任何其他字符,可能来自其他脚本。字符串аеΒ对上述正则表达式完全有效,因为它使用希腊语和西里尔文的字母。此外还有其他缺陷。字符串á将通过上面的正则表达式,而字符串́a不会(因为它从字母a和组合变音标记构造字母á)。

所以否定的字符类有时需要小心。

我也可以用数字从其它脚本,如果我想:١٢٣ :-)

可以使用字符类

[^\p{L&}\p{Nd}] 

,如果你需要采取上面的东西照顾。

2

只是否定类:

[^A-Za-z0-9]

+0

谢谢。 谢谢。 谢谢。 谢谢。 :) – sukumar 2009-11-18 09:44:19

+0

哎呀...手指记忆。 :-(fixed :-) – beggs 2009-11-18 10:53:59

2

要遵守当地的环境中使用:

[^[:alnum:]] 
+0

+1。非常好的一点。 – Joey 2009-11-18 09:47:20

+1

不幸的是,对于.NET来说,它们不支持POSIX括号表达式。根据http://www.regular-expressions.info/posixbrackets.html,表达式'[\ p {L&} \ p {Nd}]'可以代替支持Unicode的RE风格。 – Joey 2009-11-18 09:52:03

相关问题