Tôi có danh sách các chuỗi (tên tệp thực sự) và tôi muốn chỉ giữ lại các chuỗi khớp với biểu thức lọc như: \*_Test.txt
.Cách lọc danh sách các chuỗi phù hợp với mẫu
Điều gì sẽ là tốt nhất để đạt được điều này?
Dưới đây là câu trả lời mà tôi đã đưa ra:
List<string> files = new List<string>();
files.Add("MyFile1.csv");
files.Add("MyFile1_Test.txt");
files.Add("MyFile2.csv");
files.Add("MyFile2_Test.txt");
files.Add("MyFile3.csv");
files.Add("MyFile3_Test.txt");
files.Add("MyFile_Testtxttxt.txt");
// Define a filter
string filter = "*_Test.txt";
// Make the filter regex safe
foreach (char x in @"\+?|{[()^$.#")
filter = filter.Replace(x.ToString(), @"\" + x.ToString());
filter = string.Format("^{0}$",filter.Replace("*", ".*"));
// Old School
List<string> resultList1 = files.FindAll(delegate(string s) { return Regex.IsMatch(s, filter, RegexOptions.IgnoreCase); });
// Version using LINQ
List<string> resultList2 = files.Where(x => Regex.IsMatch(x, filter, RegexOptions.IgnoreCase) == true).ToList();
tôi muốn bộ lọc để được linh hoạt vì vậy tôi có thể sử dụng \ * \ * hoặc \ * .t \ * hoặc bất kỳ số kết hợp nào . Việc xóa \ * sẽ không cho tôi kết quả khớp một phần. – TeamWild
Eeep, một sửa chữa cho câu trả lời của tôi, bạn cần phải thay đổi string.Format thành '("^{0} $ ")' nếu không nó sẽ tìm thấy '" fish_Test.txtWIBBLE "' –