2013-03-05 11 views
5

Mi chiedevo se c'è un modo con Regex per accettare i caratteri associati a un determinato set di caratteri WHILE che nega un paio di altri caratteri?Classi di caratteri e negazione con Regex

Ad esempio, considerare il caso in cui si desidera accettare tutti i caratteri, cifre e caratteri di sottolineatura (\w) eccetto la lettera e e la cifra 1. C'è un modo rapido per farlo? Idealmente, mi piacerebbe qualcosa di simile a ^[\w^e1]$, anche se so che questo specifico non funzionerà.

+0

non è una domanda reale? –

+2

Sono abbastanza sicuro che la tua domanda non abbia una risposta (spero di sbagliarti), ma è sicuramente una domanda reale. Non so perché qualcuno potrebbe votare questo. – JaredPar

risposta

6

È possibile raggiungere questo obiettivo attraverso character class subtraction:

[base_group - [excluded_group]]

utilizzo di questo formato, il modello ^[\w-[e1]]$ può essere utilizzata per abbinare tutti i caratteri alfanumerici ad esclusione della lettera e e numero 1.

string[] inputs = 
{ 
    "a", "b", "c", "_", "2", "3", 
    " ", "1", "e" // false cases 
}; 
string pattern = @"^[\w-[e1]]$"; 
foreach (var input in inputs) 
{ 
    Console.WriteLine("{0}: {1}", Regex.IsMatch(input, pattern), input); 
} 
+3

Solo una dichiarazione di non responsabilità per questo: Non supportato nella maggior parte dei sapori di RegEx. Bene, mentre stai usando .NET, è solo qualcosa da tenere a mente se utilizzi l'espressione regolare altrove. –

+0

@JasonLarke è vero. Come riferimento, la [tabella di confronto degli aromi regex] (http://www.regular-expressions.info/refflavors.html) mostra quali aromi supportano questa funzionalità (supporto molto limitato). –

+0

@dtb grazie per l'aggiunta del link! –

0

Un portatile ma meno succinto molto più di una soluzione di Ahmad sarebbe definire solo una classe di caratteri che esclude e e 1.

Dovrebbe funzionare come previsto.

+0

Nel sapore .NET della regex, '\ w' corrisponde a tutti i caratteri Unicode nelle categorie Ll, Lu, Lt, Lo, Lm, Nd e Pc. Sono un po 'troppi i caratteri da elencare esplicitamente. – dtb

Problemi correlati