2014-01-29 4 views
0

Мне нужно загрузить файлы из каталога, аналогичного этому примеру: «Client_Test_delete.xlsx». Но загружая все файлы с расширением _delete.xlsx. Как создать действующую testMask?Regex, содержащий определенное слово

var testMask = @"^[Client]+(.*_delete.xlsx*).*$"; 
var searchPattern = new Regex(testMask, RegexOptions.IgnoreCase); 
var files = Directory.GetFiles(fullPath).Where(f => searchPattern.IsMatch(f)); 

Файлы в каталоге:

c:\Client_Test_delete.xlsx" 
c:\Some_Test_delete.xlsx" 
+1

Попробуйте изучить регулярные выражения. Они совсем не сложны. Важное замечание: ваши случайные попытки никогда не будут работать. – zerkms

ответ

2

В System.IO.Directory.GetFiles имеет перегрузку, которая есть шаблон поиска, попробуйте это. Это проще. [я не знаю регулярные выражения]

http://msdn.microsoft.com/it-it/library/ms143316%28v=vs.110%29.aspx

+0

Действительно. В этом случае Regex не требуется. Добавьте английскую ссылку здесь: http://msdn.microsoft.com/en-us/library/ms143316%28v=vs.110%29.aspx – Johnny

2
string txt="Client_Test_delete.xlsx"; 

    string re1="(Client)"; // Word 1 
    string re2=".*?"; // Non-greedy match on filler 
    string re3="_"; // Uninteresting: c 
    string re4=".*?"; // Non-greedy match on filler 
    string re5="(_)"; // Any Single Character 1 
    string re6="(delete)"; // Word 2 
    string re7="(\\.)"; // Any Single Character 2 
    string re8="(xlsx)"; // Variable Name 1 

    Regex r = new Regex(re1+re2+re3+re4+re5+re6+re7+re8,RegexOptions.IgnoreCase|RegexOptions.Singleline); 
    Match m = r.Match(txt); 
    if (m.Success) 
    { 
    //Delete file 
    } 
+0

Обновлено, поэтому оно включает в себя слово «Клиент» –

1

попробовать с этим регулярным выражением:

^(?: [\ Ш] \:) + \ * (клиент). *? _. *? _ delete.xlsx

Я обновляю выражение с помощью клиентской части.

Это матч: "C: \ Client_Test_delete.xlsx"
и не с "C: \ Some_Test_delete.xlsx"

+0

Мне нужно первое слово «Клиент» " – zrabzdn

+0

^(?: [\ W] \:) + \ * (Клиент). *? _. *? _ Delete.xlsx pattern не работает – zrabzdn

1

Вы можете попробовать так:

var testMask = @"^Client_[a-z\d]+_delete.xlsx?$"; // OR "^Client_[^_]+_delete.xlsx?$" 
var searchPattern = new Regex(testMask, RegexOptions.IgnoreCase); 
var files = Directory.GetFiles(fullPath).Where(f => searchPattern.IsMatch(f)); 

Это будет соответствовать файлы с .xlsx или .xls расширения и первое слово client и последнее слово delete.

Надеюсь, что это даст вам идею идти вперед.

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