2009-11-18 19 views
5

Fornire una soluzione per scrivere un'espressione regolare come segue in C# .NET: Avrei bisogno di un RegEx per non alfabeti (dalla a alla z; dalla A alla Z) e Non- Numeri (da 0 a 9). Significa dire come modo inverso per ottenere un'espressione regolare diversa dagli alfabeti e da altri numeri (da 0 a 9).Regex per non alfabeti e non numerici

Gentilmente suggerire la soluzione per lo stesso.

risposta

17

È possibile utilizzare un negated character class qui:

[^a-zA-Z0-9] 

Sopra regex corrisponderà un singolo carattere che non può essere una lettera minuscola o maiuscola latino o un numero.

Il ^ alla partenza della classe di caratteri (la parte compresa tra [ e ]) nega la classe completa in modo che corrisponda nulla non nella classe, invece di un comportamento normale classe di caratteri.

per renderlo utile, probabilmente si desidera uno di quelli:

  1. Zero o più di tali personaggi

    [^a-zA-Z0-9]* 
    

    L'asterisco (*) qui significa che la parte che precede può essere ripetuto a zero o più volte.

  2. Uno o più di tali caratteri

    [^a-zA-Z0-9]+ 
    

    Il plus (+) qui significa che la parte precedente può essere ripetuta una o più volte.

  3. A completa (eventualmente vuoto) stringa, costituita esclusivamente da tali caratteri

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

    Qui i caratteri ^ e $ hanno un significato anchors, corrispondenti all'inizio e alla fine della stringa, rispettivamente. Ciò garantisce che l'intera stringa sia composta da caratteri non presenti in quella classe di caratteri e nessun altro personaggio venga prima o dopo di essi.

  4. Una stringa completa (non vuota), costituita esclusivamente da tali personaggi

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

Elaborando un po ', questo non (e non può) fare in modo che non lo farà usa altri caratteri, possibilmente da altri script. La stringa аеΒ sarebbe completamente valida con l'espressione regolare precedente, poiché utilizza lettere dal greco e dal cirillico. Inoltre ci sono altre insidie. La stringa á passerà sopra l'espressione regolare, mentre la stringa ́a non lo farà (perché costruisce la lettera á dalla lettera a e un segno diacritico combinato).

Le classi di caratteri così negate devono essere prese con cura a volte.

Posso anche usare numeri da altri script, se volevo: ١٢٣ :-)

È possibile utilizzare la classe di caratteri

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

se avete bisogno di prendersi cura delle cose di cui sopra.

2

solo nega la classe:

[^A-Za-z0-9]

+0

Grazie. Grazie. Grazie. Grazie. :) – sukumar

+0

Oops ... Memoria delle dita. :-(fisso :-) – beggs

2

di obbedire uso contesto locale:

[^[:alnum:]] 
+0

+1. Ottimo punto. – Joey

+1

Sfortunatamente uno terribile per .NET in quanto non supportano le espressioni del bracket POSIX. Secondo http://www.regular-expressions.info/posixbrackets.html l'espressione '[\ p {L &} \ p {Nd}]' è un possibile sostituto per i sapori di RE con riconoscimento Unicode. – Joey

Problemi correlati