मेरे पास खोज पैरामीटर के रूप में फ़ाइल नामों और एक डॉस-शैली वाइल्डकार्ड की एक सूची है।
List<string> filenames = FileNames;
मैं केवल वही फ़ाइलें कैसे प्राप्त कर सकता हूँ जो मेरे वाइल्डकार्ड ("p*.doc", "w*.*", "??r.doc?", इत्यादि) से मेल खाती हों?
हां, मुझे Directory.GetFiles के बारे में पता है, लेकिन मेरे पास कोई निर्देशिका नहीं है। केवल फ़ाइल नाम।
2 जवाब
आप क्या कर सकते हैं डॉस-स्टाइल वाइल्डकार्ड फ़ाइल नाम विनिर्देश से रेगेक्स बनाते हैं, फिर आप रेगेक्स से मेल खाने वाली सूची से फ़ाइल नामों का चयन कर सकते हैं, जैसे कुछ:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
namespace ConsoleApp1
{
class Program
{
static string DosWildcardToRegex(string dwc)
{
string s = "";
foreach (char c in dwc)
{
if (c == '.') { s += @"\."; }
else if (c == '*') { s += ".*?"; }
else if (c == '?') { s += "."; }
else s += Regex.Escape(c.ToString());
}
return "^" + s + "$";
}
static void Main(string[] args)
{
string userWildcardSpec = "p*.xls*";
string reWildcard = DosWildcardToRegex(userWildcardSpec);
Regex re = new Regex(reWildcard, RegexOptions.IgnoreCase);
var sampleFilenames = new List<string>() { "a1.xls", "p2.txt", "p1.xls", "p234.xls", "p7.xlsx" };
var matchedFilenames = sampleFilenames.Where(f => re.IsMatch(f));
Console.WriteLine(string.Join("\r\n", matchedFilenames));
Console.ReadLine();
}
}
}
कौन सा आउटपुट:
p1.xls
p234.xls
p7.xlsx
- रेगेक्स में, एक
.
एक विशेष वर्ण है जिसका अर्थ है "कोई भी वर्ण", इसलिए इसे\.
के रूप में बचाना होगा। - डॉस वाइल्डकार्ड में,
*
का अर्थ किसी भी वर्ण का शून्य या अधिक है, जो कि रेगेक्स में.*?
है (?
इसे "गैर-लालची" बनाता है)। - डॉस वाइल्डकार्ड में,
?
का अर्थ है एक वर्ण, जो कि रेगेक्स में.
है। - यदि कोई अन्य विशेष रेगेक्स चरित्र है, तो वे जहां आवश्यक हो वहां से बच निकले हैं।
^
और$
का मतलब क्रमशः स्ट्रिंग का प्रारंभ और अंत है, इसलिए इसे फ़ाइल नाम के बीच से अवांछित मिलान नहीं मिलेगा।
सबसे आसान तरीका:
using Microsoft.VisualBasic.CompilerServices;
...
var filenames = new List<string>() { "b.pdf", "al.rtf", "mel.doc"};
var matched = filenames.Where(f => LikeOperator.LikeString(f, "*.d*", CompareMethod.Text));
संबंधित सवाल
नए सवाल
c#
C # (उच्चारण "तेज देखें") Microsoft द्वारा विकसित एक उच्च स्तरीय, सांख्यिकीय रूप से टाइप किया हुआ, बहु-प्रतिमान प्रोग्रामिंग भाषा है। C # कोड आमतौर पर Microsoft के .NET परिवार के टूल और रन-टाइम को लक्षित करता है, जिसमें .NET फ्रेमवर्क, .NET कोर और Xamarin अन्य शामिल हैं। C # या C # के औपचारिक विनिर्देश में लिखे गए कोड के बारे में प्रश्नों के लिए इस टैग का उपयोग करें।