C# में नियमित अभिव्यक्तियाँ: शुरुआती लोगों के लिए पूर्ण गाइड
\nनियमित अभिव्यक्तियाँ (regular expressions, regex) किसी दिए गए पैटर्न के अनुसार स्ट्रिंग्स को खोजने, बदलने और जांचने के लिए एक शक्तिशाली उपकरण हैं। C# (.NET) में, नियमित अभिव्यक्तियों के साथ काम System.Text.RegularExpressions नेमस्पेस के माध्यम से कार्यान्वित किया जाता है। यह लेख आपको सबसे सरल पैटर्न बनाने से लेकर Regex क्लास की सभी क्षमताओं का उपयोग करने तक, मूल बातें सीखने में मदद करेगा।
1. C# में Regex के साथ काम करने की मूल बातें
\nशुरू करने के लिए, नेमस्पेस शामिल करें:
\nusing System.Text.RegularExpressions;\nRegex क्लास स्टैटिक और इंस्टेंस मेथड प्रदान करता है। यह जांचने का सबसे सरल तरीका है कि क्या किसी स्ट्रिंग में पैटर्न के अनुसार कोई सबस्ट्रिंग है, IsMatch मेथड है:
string text = "नमस्ते, मेरा ईमेल: test@example.com";\nstring pattern = @"\\w+@\\w+\\.\\w+"; // सरल ईमेल पैटर्न\n\nbool hasEmail = Regex.IsMatch(text, pattern);\nConsole.WriteLine(hasEmail); // True\nपैटर्न का विश्लेषण:
\n- \n
\\w+— एक या अधिक अक्षर, अंक या अंडरस्कोर \n@— "ऐट" चिह्न \n\\.— एस्केप किया गया डॉट (बिना एस्केप के डॉट का अर्थ है "कोई भी वर्ण") \n
बार-बार कॉल करने के लिए, पैटर्न के पुन: संकलन से बचने के लिए Regex ऑब्जेक्ट बनाना बेहतर है:
Regex emailRegex = new Regex(@"\\w+@\\w+\\.\\w+");\nConsole.WriteLine(emailRegex.IsMatch("admin@site.ru")); // True\n\n2. सभी मिलान खोजना: Match और MatchCollection
\nMatch मेथड पहला मिलान लौटाता है, जबकि Matches सभी मिलान MatchCollection संग्रह के रूप में लौटाता है। प्रत्येक Match ऑब्जेक्ट में मिली सबस्ट्रिंग, उसकी स्थिति और लंबाई के बारे में जानकारी होती है।
उदाहरण: स्ट्रिंग से सभी संख्याएँ निकालना
\nstring data = "2023 में 15 घटनाएँ हुईं, 2024 में — पहले से 23।";\nstring numberPattern = @"\\d+"; // एक या अधिक अंक\n\nMatchCollection matches = Regex.Matches(data, numberPattern);\n\nforeach (Match match in matches)\n{\n Console.WriteLine($"मिला: {match.Value} स्थान पर {match.Index}");\n}\n// आउटपुट:\n// मिला: 2023 स्थान पर 0\n// मिला: 15 स्थान पर 8\n// मिला: 2024 स्थान पर 22\n// मिला: 23 स्थान पर 37\nसमूहों (Group) के साथ काम करना। समूह मिलान के कुछ हिस्सों को निकालने की अनुमति देते हैं। उदाहरण के लिए, "दिन.महीना.वर्ष" प्रारूप में दिनांक खोजते समय, दिन, महीना और वर्ष अलग-अलग प्राप्त किए जा सकते हैं:
\nstring input = "आज 25.12.2024 है";\nstring datePattern = @"(\\d{2})\\.(\\d{2})\\.(\\d{4})";\n\nMatch match = Regex.Match(input, datePattern);\nif (match.Success)\n{\n Console.WriteLine($"दिन: {match.Groups[1].Value}"); // 25\n Console.WriteLine($"महीना: {match.Groups[2].Value}"); // 12\n Console.WriteLine($"वर्ष: {match.Groups[3].Value}"); // 2024\n}\nसमूहों को 1 से क्रमांकित किया जाता है (समूह 0 पूरा मिलान है)। नामांकित समूह पढ़ने में अधिक सुविधाजनक होते हैं:
\nstring namedPattern = @"(?<day>\\d{2})\\.(?<month>\\d{2})\\.(?<year>\\d{4})";\nmatch = Regex.Match(input, namedPattern);\nConsole.WriteLine(match.Groups["day"].Value); // 25\n\n3. उन्नत सुविधाएँ: प्रतिस्थापन और विकल्प
\nRegex.Replace के साथ टेक्स्ट बदलना। यह न केवल सबस्ट्रिंग को हटाने या बदलने की अनुमति देता है, बल्कि प्रतिस्थापन स्ट्रिंग में समूहों का उपयोग करने की भी अनुमति देता है:
\nstring phone = "+7 (123) 456-78-90";\n// अंकों को छोड़कर सब कुछ हटाएँ\nstring clean = Regex.Replace(phone, @"[^\\d]", "");\nConsole.WriteLine(clean); // 71234567890\n\n// प्रारूप बदलें: (123) 456-78-90 → 123-456-7890\nstring formatted = Regex.Replace(phone, \n @"\\((\\d{3})\\)\\s*(\\d{3})-(\\d{2})-(\\d{2})",\n "$1-$2-$3$4");\nConsole.WriteLine(formatted); // 123-456-7890\nमहत्वपूर्ण विकल्प (RegexOptions):
\n- \n