2009-11-18 107 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

相關問題