2010-04-27 3 views
1

Я пытаюсь создать регулярное выражение, которое будет принимать все файлы, у которых нет списка расширений. В частности, я пытаюсь отфильтровать имена файлов, которые заканчиваются на .csvФильтр расширения файла Regex

Я проработал около часа и не смог понять это. Я использую .NET Regex.

+0

Какая версия .Net? –

+0

Я использую .net 3.5 –

ответ

4

Следующее должно сделать трюк. Я только что проверил его с .net.

^.*\.(?!csv).*$ 

Обязательно включать IgnoreCase RegexOptions, чтобы сделать его чувствительно к регистру.

+0

Спасибо тонну, это сработало отлично! Из любопытства, почему он не работает без. * В конце? –

+0

Оператор * говорит, что «включает любое количество X или вообще ничего». В этом случае X является «.» поэтому его любой характер. Если вы хотите потребовать расширение какого-либо переключателя типа «*» на «+» –

+0

Это не удастся, если у вас есть другой период перед расширением файла. (например, myFile.extension.txt) – user654628

0
 For Each r As String In _invalidFileExpressions 
      If bValid Then 
       bValid = Not Regex.IsMatch(FileName, r, RegexOptions.IgnoreCase) 
      End If 
     Next 

г будет определяться как регулярное выражение .net, некоторые образцы:

 ".*\.csv" 
     ".*d\.txt" 
     "\d\d_\d{8}[dmysDMYS].txt" 
     ".*(batch).*\.txt" 
     ".*(elvis).*\.txt" 
     ".*(anal).*\.txt" 
     ".*(monthlystats)\.txt" 
     ".*(rx)\.txt" 
     ".*(BAD|bad)\.txt" 
     ".*(mm)\.txt" 
     ".*(flu)\.txt" 
1

Если вы используете .NET 3.5 или выше, это не-регулярное выражение решение должно работать:

var root = new DirectoryInfo(@"C:\"); 
var files = root.GetFiles(); 

var filteredFiles = files.Where(f => f.Extension != "csv"); 
+0

Это хороший пример, но на самом деле это список имен файлов в текстовом файле без использования разделяемой строки. –

Смежные вопросы