दिलचस्प पोस्ट
जावा स्ट्रिंग सभी गैर अंकीय वर्णों को निकालते हैं एक Genymotion VM (कोई खींचें और ड्रॉप समर्थन के साथ) में Google Play सेवाएं स्थापित करने के लिए कैसे? Printf में अनुक्रमित शून्य से बचें () जब मैं os.system () या subprocess.call () का उपयोग करता हूं, तो मैं कंसोल कैसे छुपूं? कॉरलाइनिस को कॉल करने का अधिक संगठित तरीका? मैं स्विफ्ट में एरेज़ को कैसे जोड़ या मर्ज कर सकता हूं? PHP PDO में अंतिम निष्पादित क्वेरी प्राप्त करें सी / सी ++ में सभी पर्यावरण चर को प्रिंट करना एंड्रॉइड: मेरे एंड्रॉइड एप्लिकेशन में वीडियो कॉलिंग कैसे एकीकृत करें? वर्तमान फ़ाइल का नाम gulp.src में प्राप्त करें () शून्य मुख्य () {if (sizeof (int)> -1) printf ("true"); दूसरा प्रिंटफ़ ("गलत"); ; जावास्क्रिप्ट ऑब्जेक्ट के लिए गतिशील गहरी सेटिंग सीएसएस गुण: प्रदर्शन बनाम दृश्यता जेएसपी और जावास्क्रिप्ट का उपयोग कर अतुल्यकालिक फ़ाइल अपलोड (एजेएक्स फाइल अपलोड) कुछ यूनिकोड वर्ण मैट्रिक्स में क्यों प्रदर्शित होते हैं, लेकिन आर में डेटा फ़्रेम नहीं?

वाइल्डकार्ड (*,?, आदि) को रीगएक्स का उपयोग कर एक स्ट्रिंग पर खोज करने की आवश्यकता है

मुझे स्ट्रिंग पर वाइल्डकार्ड ( * , ? , आदि) खोज करने की आवश्यकता है यही है जो मैने किया है:

 string input = "Message"; string pattern = "d*"; Regex regex = new Regex(pattern, RegexOptions.IgnoreCase); if (regex.IsMatch(input)) { MessageBox.Show("Found"); } else { MessageBox.Show("Not Found"); } 

उपरोक्त कोड "मिला" ब्लॉक के साथ मार रहा है लेकिन वास्तव में यह नहीं होना चाहिए!

अगर मेरा पैटर्न "ई *" है तो केवल "मिला" हिट होना चाहिए

मेरी समझ या आवश्यकता है घ * खोज को "d" वाले पाठ को किसी भी वर्णों के बाद मिलना चाहिए।

क्या मुझे अपना पैटर्न "डी। *" और "ई। *" के रूप में बदलना चाहिए? क्या वाइल्ड कार्ड के लिए .NET में कोई समर्थन है जो रीजक्स क्लास का उपयोग करते हुए आंतरिक रूप से करता है?

Solutions Collecting From Web of "वाइल्डकार्ड (*,?, आदि) को रीगएक्स का उपयोग कर एक स्ट्रिंग पर खोज करने की आवश्यकता है"

यह मुश्किल नहीं है। http://www.codeproject.com/KB/recipes/wildcardtoregex.aspx से :

 public static string WildcardToRegex(string pattern) { return "^" + Regex.Escape(pattern) .Replace(@"\*", ".*") .Replace(@"\?", ".") + "$"; } 

तो foo*.xls? तरह कुछ foo*.xls? ^foo.*\.xls.$ बदल जाएगा

आप एक साधारण वाइल्डकार्ड मच रेगएक्स के बिना एक विज़ुअल बेसिक फंक्शन का उपयोग कर सकते हैं जिसे लाएस्टस्ट्रिंग कहते हैं।

 using Microsoft.VisualBasic; using Microsoft.VisualBasic.CompilerServices; if (Operators.LikeString("This is just a test", "*just*", CompareMethod.Text)) { Console.WriteLine("This matched!"); } 

यदि आप तुलना करें CompareMethod.Text प्रयोग करते हैं CompareMethod.Text यह केस-असंवेदनशील की तुलना करेगा। मामले-संवेदी तुलना के लिए, आप तुलनात्मक CompareMethod.Binary उपयोग कर सकते हैं।

यहां अधिक जानकारी: http://www.henrikbrinch.dk/Blog/2012/02/14/Wildcard- मैचिंग-इन-सी

एमएसडीएन: http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.compilerservices.operators.likestring%28v=vs.100%29.ASPX

ग्लोब अभिव्यक्ति d* का सही नियमित अभिव्यक्ति तैयार है ^d , जिसका मतलब है कि d शुरू होता है जो कुछ भी मैच होता है।

  string input = "Message"; string pattern = @"^d"; Regex regex = new Regex(pattern, RegexOptions.IgnoreCase); 

(इस मामले में @ कोटिंग जरूरी नहीं है, लेकिन अच्छा अभ्यास क्योंकि कई regexes बैकस्लैश का उपयोग करते हैं जो कि अकेले छोड़े जाने की जरूरत है, और यह रीडर को यह भी इंगित करता है कि यह स्ट्रिंग विशेष है)।

विंडोज और * निक्स वाइल्डकार्ड का अलग तरीके से इलाज करें * ? और विंडोज द्वारा एक बहुत जटिल तरीके से संसाधित होते हैं, किसी की मौजूदगी या स्थिति दूसरे के अर्थ को बदल देती है। जबकि * नुक्स यह सरलता रखता है, यह सब करता है सिर्फ एक सरल पैटर्न मैच है। इसके अलावा, विंडोज मेल खाता है ? 0 या 1 वर्णों के लिए, लिनक्स उसको ठीक से 1 वर्णों से मेल खाता है।

मुझे इस मामले पर आधिकारिक दस्तावेज नहीं मिले हैं, यह सिर्फ मेरे निष्कर्ष पर विंडोज 8 / एक्सपी (कमांड लाइन, dir कमांड को विशिष्ट करने के लिए, और Directory.GetFilesDirectory.GetFiles विधि भी उसी नियम का उपयोग करती है) और उबंटू सर्वर 12.04.1 ( ls कमांड)। मैंने दसियों आम और असामान्य मामलों का काम किया, हालांकि कई असफल मामलों में भी कई हैं

गेब द्वारा वर्तमान जवाब, * nux की तरह काम करता है यदि आप भी एक विंडोज शैली चाहते हैं, और अपूर्णता को स्वीकार करने के लिए तैयार हैं, तो यहां यह है:

  /// <summary> /// <para>Tests if a file name matches the given wildcard pattern, uses the same rule as shell commands.</para> /// </summary> /// <param name="fileName">The file name to test, without folder.</param> /// <param name="pattern">A wildcard pattern which can use char * to match any amount of characters; or char ? to match one character.</param> /// <param name="unixStyle">If true, use the *nix style wildcard rules; otherwise use windows style rules.</param> /// <returns>true if the file name matches the pattern, false otherwise.</returns> public static bool MatchesWildcard(this string fileName, string pattern, bool unixStyle) { if (fileName == null) throw new ArgumentNullException("fileName"); if (pattern == null) throw new ArgumentNullException("pattern"); if (unixStyle) return WildcardMatchesUnixStyle(pattern, fileName); return WildcardMatchesWindowsStyle(fileName, pattern); } private static bool WildcardMatchesWindowsStyle(string fileName, string pattern) { var dotdot = pattern.IndexOf("..", StringComparison.Ordinal); if (dotdot >= 0) { for (var i = dotdot; i < pattern.Length; i++) if (pattern[i] != '.') return false; } var normalized = Regex.Replace(pattern, @"\.+$", ""); var endsWithDot = normalized.Length != pattern.Length; var endWeight = 0; if (endsWithDot) { var lastNonWildcard = normalized.Length - 1; for (; lastNonWildcard >= 0; lastNonWildcard--) { var c = normalized[lastNonWildcard]; if (c == '*') endWeight += short.MaxValue; else if (c == '?') endWeight += 1; else break; } if (endWeight > 0) normalized = normalized.Substring(0, lastNonWildcard + 1); } var endsWithWildcardDot = endWeight > 0; var endsWithDotWildcardDot = endsWithWildcardDot && normalized.EndsWith("."); if (endsWithDotWildcardDot) normalized = normalized.Substring(0, normalized.Length - 1); normalized = Regex.Replace(normalized, @"(?!^)(\.\*)+$", @".*"); var escaped = Regex.Escape(normalized); string head, tail; if (endsWithDotWildcardDot) { head = "^" + escaped; tail = @"(\.[^.]{0," + endWeight + "})?$"; } else if (endsWithWildcardDot) { head = "^" + escaped; tail = "[^.]{0," + endWeight + "}$"; } else { head = "^" + escaped; tail = "$"; } if (head.EndsWith(@"\.\*") && head.Length > 5) { head = head.Substring(0, head.Length - 4); tail = @"(\..*)?" + tail; } var regex = head.Replace(@"\*", ".*").Replace(@"\?", "[^.]?") + tail; return Regex.IsMatch(fileName, regex, RegexOptions.IgnoreCase); } private static bool WildcardMatchesUnixStyle(string pattern, string text) { var regex = "^" + Regex.Escape(pattern) .Replace("\\*", ".*") .Replace("\\?", ".") + "$"; return Regex.IsMatch(text, regex); } 

एक अजीब बात है, यहां तक ​​कि विंडोज़ एपीआई पाथ मैचस्पेक भी FindFirstFile से सहमत नहीं है बस a1*. प्रयास करें , PathMatchSpec कहना है कि यह a1 मेल खाता है, PathMatchSpec नहीं कहता है।

d* मतलब है कि इसे शून्य या अधिक " d " वर्णों से मेल खाना चाहिए। इसलिए किसी भी स्ट्रिंग एक वैध मैच है। बजाय d+ कोशिश करो!

वाइल्डकार्ड पैटर्न के लिए समर्थन पाने के लिए मैं वाइल्डकार्ड को RegEx समकक्ष के साथ बदल देगा जैसे * हो जाता है .* और ? हो जाता है .? । तब आपकी अभिव्यक्ति ऊपर हो जाती है d.*

आपको अपने वाइल्डकार्ड अभिव्यक्ति को एक नियमित अभिव्यक्ति में कनवर्ट करना होगा। उदाहरण के लिए:

  private bool WildcardMatch(String s, String wildcard, bool case_sensitive) { // Replace the * with an .* and the ? with a dot. Put ^ at the // beginning and a $ at the end String pattern = "^" + Regex.Escape(wildcard).Replace(@"\*", ".*").Replace(@"\?", ".") + "$"; // Now, run the Regex as you already know Regex regex; if(case_sensitive) regex = new Regex(pattern); else regex = new Regex(pattern, RegexOptions.IgnoreCase); return(regex.IsMatch(s)); } 

आपको इनपुट वाइल्डकार्ड पैटर्न में विशेष Regex प्रतीकों से बचना होगा (उदाहरण के लिए पैटर्न *.txt ^.*\.txt$ समतुल्य होगा) तो स्लेश, ब्रेसेज़ और कई विशेष प्रतीकों को @"\" + s साथ प्रतिस्थापित किया जाना चाहिए, विशेष रेगेक्स प्रतीक

सभी ऊपरी कोड अंत तक सही नहीं हैं

इसका कारण यह है कि जब zz * foo * या zz * खोजते हैं तो आपको सही परिणाम नहीं मिलेगा।

और यदि आप TotalCommander में "abcd *" में "abcd *" खोजते हैं तो उसे एबीसीडी फ़ाइल मिलेगी, ताकि सभी ऊपरी कोड गलत हो।

यहां सही कोड है

 public string WildcardToRegex(string pattern) { string result= Regex.Escape(pattern). Replace(@"\*", ".+?"). Replace(@"\?", "."); if (result.EndsWith(".+?")) { result = result.Remove(result.Length - 3, 3); result += ".*"; } return result; } 

आप WildcardPattern से WildcardPattern का उपयोग करना चाह सकते हैं। System.Management.Automation विधानसभा मेरा जवाब यहां देखें

मुझे लगता है कि @ मिमित्री वाइल्डकार्ड के साथ तार तार मिलान में अच्छा समाधान है https://stackoverflow.com/a/30300521/1726296

उनके समाधान के आधार पर, मैंने दो विस्तार विधियों का निर्माण किया है। (क्रेडिट उसे जाता है)

सहायक हो सकता है

 public static String WildCardToRegular(this String value) { return "^" + Regex.Escape(value).Replace("\\?", ".").Replace("\\*", ".*") + "$"; } public static bool WildCardMatch(this String value,string pattern,bool ignoreCase = true) { if (ignoreCase) return Regex.IsMatch(value, WildCardToRegular(pattern), RegexOptions.IgnoreCase); return Regex.IsMatch(value, WildCardToRegular(pattern)); } 

उपयोग:

 string pattern = "file.*"; var isMatched = "file.doc".WildCardMatch(pattern) 

या

 string xlsxFile = "file.xlsx" var isMatched = xlsxFile.WildCardMatch(pattern)