Ответ 1
Возможно, вы захотите использовать регулярное выражение для этого, если ваши шаблоны будут сложными....
вы можете использовать правильное регулярное выражение как ваш фильтр (например, для вашего конкретного примера это будет new Regex(@"^.*_Test\.txt$")
, или вы можете применить алгоритм преобразования.
В любом случае вы можете просто использовать linq для применения регулярного выражения.
например
var myRegex=new Regex(@"^.*_Test\.txt$");
List<string> resultList=files.Where(myRegex.IsMatch).ToList();
Некоторые люди могут подумать, что приведенный выше ответ неверен, но вы можете использовать группу методов вместо лямбда. Если вы хотите использовать полную ламу, вы будете использовать:
var myRegex=new Regex(@"^.*_Test\.txt$");
List<string> resultList=files.Where(f => myRegex.IsMatch(f)).ToList();
или не Linq
List<string> resultList=files.FindAll(delegate(string s) { return myRegex.IsMatch(s);});
если вы конвертировали фильтр, простым преобразованием было бы
var myFilter="*_Test.txt";
var myRegex=new Regex("^" + myFilter.Replace("*",".*") +"$");
У вас также могут быть такие фильтры, как "*Test*.txt"
с помощью этого метода.
Однако, если вы спустили этот маршрут преобразования, вам нужно будет убедиться, что вы выбрали все специальные символы регулярных выражений, например. "становится @". "," ( "становится @" (" etc.......
Изменить. Пример замены TOO просто, потому что он не преобразует. поэтому он найдет "fish_Textxtxt"
, так что избегайте, по крайней мере, .
так
string myFilter="*_Test.txt";
foreach(char x in @"\+?|{[()^$.#") {
myFilter = myFilter.Replace(x.ToString(),@"\"+x.ToString());
}
Regex myRegex=new Regex(string.Format("^{0}$",myFilter.Replace("*",".*")));