2010-12-09 24 views
1

J'ai besoin de filtrer une liste de fichiers, dont certains sont des fichiers csv, et certains d'entre eux sont ajoutés avec une balise de contrôle," .cntl ".Regex en C# qui contient "this" mais pas "que

Exemple: Fichier1.csv, file1.csv.cntl

Je voudrais mettre en place un regex qui vérifie si un fichier contient « csv » et non « cntl » en ce moment j'ai. cela.

csv(?!cntl) 

ce ne fonctionne pas. à quoi bon être regex?

PS. Tout est fait en C#.

Répondre

9

Votre regex doit vérifier si un fichier se termine par .csv

\.csv$ 

Rappelez-vous que csv pourrait être contenue ailleurs dans le nom du fichier.

+0

Beaucoup de réponses variées, mais c'est incroyablement simple. Je vous remercie. –

+1

@Norla, je dois argumenter que vérifier 'string.EndsWith()' est beaucoup plus simple que d'utiliser une regex en premier lieu. – jjnguy

0

Cela devrait fonctionner:

csv(?!.*cntl)
+0

Si vous n'avez pas "." sera-t-il possible d'avoir un fichier qui n'est pas un fichier réel "csv". "Myfilecsv" va aller à vrai – sv88erik

+0

@ sv88erik: Oui, mais ce n'est pas la question que l'OP a posée. – cdhowie

+1

"Exemple: fichier1.csv, fichier1.csv.cntl": comme indiqué dans cette syntaxe :) – sv88erik

7

Voici le modèle que vous voulez.

@"csv(?!\.cntl)" 

Mais, ne serait-il plus facile de vérifier:

if (string.EndsWith("cntl")) 

L'utilisation d'un regex est inutilement compliquée.

+0

Je ne pense pas que '@" csv! (? \. Cntl) "' est une regex valide. – eldarerathis

+0

@eldare, j'avais ce même sentiment, mais je ne pouvais pas décider ce que je pensais être faux avec elle. Que pensez-vous est faux? – jjnguy

+0

@jjnguy: Lookahead négatif devrait être '(?! )'. Si vous déplacez le '!' Ça devrait aller (et un test rapide semble le confirmer). – eldarerathis