से मेल खाने वाले स्ट्रिंग्स की सूची को फ़िल्टर करने के लिए कैसे करें मेरे पास तारों की एक सूची है (वास्तव में फ़ाइल नाम) और मैं केवल उन लोगों को रखना चाहता हूं जो फ़िल्टर अभिव्यक्ति से मेल खाते हैं जैसे: \*_Test.txt
।पैटर्न
इसे प्राप्त करने के लिए सबसे अच्छा क्या होगा?
यहाँ जवाब है कि मैं के साथ आया है:
List<string> resultList = files.Where(x => x.EndsWith("_Test.txt")).ToList();
या आप कुछ पुराने/विरासत नेट संस्करण पर इस चला रहे हैं (:
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 \ * या संयोजनों की संख्या । \ * को हटाने से मुझे आंशिक मिलान नहीं मिलेंगे। – TeamWild
ईप, मेरे उत्तर में एक सुधार आपको स्ट्रिंग को बदलने की जरूरत है। '("^ {0} $") के लिए फॉर्मेट करें अन्यथा इसे "fish_Test.txtWIBBLE" ' –