التعبيرات النمطية في C#: دليل شامل مع أمثلة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

التعبيرات النمطية في C#: أداة قوية للعمل مع النصوص



التعبيرات النمطية (regex) هي أداة لا غنى عنها للبحث عن البيانات النصية واستخراجها واستبدالها وفق نمط معين. في C# (.NET)، يتم العمل مع التعبيرات النمطية من خلال مساحة الأسماء القوية System.Text.RegularExpressions والفئة Regex. في هذه المقالة، سنشرح الإمكانيات الأساسية للتعبيرات النمطية في C# من خلال أمثلة عملية ستساعدك على أتمتة معالجة السلاسل النصية.



أساسيات فئة Regex في C#



الفئة الرئيسية للعمل مع التعبيرات النمطية في C# هي System.Text.RegularExpressions.Regex. وهي توفر طرقًا ثابتة (static) وطرقًا خاصة بالكائن (instance) لتنفيذ عمليات البحث والاستبدال وتقسيم السلاسل النصية.



إنشاء كائن Regex



يمكنك إنشاء نسخة من فئة Regex عن طريق تمرير النمط (pattern) إلى المُنشئ، واختياريًا بعض العلامات (flags):



using System.Text.RegularExpressions;

// إنشاء بسيطRegex regex = new Regex(@"\\d+");

// مع علامات (مثل تجاهل حالة الأحرف)Regex regexIgnoreCase = new Regex(@"hello", RegexOptions.IgnoreCase);


هام: في C#، يُنصح باستخدام السلاسل الحرفية (مع البادئة @) لكتابة الأنماط. هذا يسمح لك بعدم الحاجة إلى هروب الشرطات المائلة العكسية، مما يجعل الكود أكثر قابلية للقراءة.



الطرق الثابتة لـ Regex



للعمليات التي تتم لمرة واحدة، من الأسهل استخدام الطرق الثابتة التي لا تتطلب إنشاء نسخة من الفئة:



bool isMatch = Regex.IsMatch("Привет, мир!", @"мир");Console.WriteLine(isMatch); // True

string result = Regex.Replace("123abc456", @"\\d+", "X");Console.WriteLine(result); // XabcX


الطرق الأساسية للعمل مع النصوص



توفر فئة Regex أربع طرق رئيسية: IsMatch و Match و Matches و Split. دعنا نستعرض كل منها مع أمثلة.



طريقة IsMatch — التحقق من التطابق



ترجع طريقة IsMatch قيمة bool تشير إلى ما إذا تم العثور على تطابق واحد على الأقل مع النمط في السلسلة النصية.



string email = "user@example.com";string pattern = @"^[\\w\\.-]+@[\\w\\.-]+\\.\\w{2,4}$";

if (Regex.IsMatch(email, pattern)){ Console.WriteLine("البريد الإلكتروني صحيح");}else{ Console.WriteLine("البريد الإلكتروني غير صحيح");}


يتحقق هذا المثال مما إذا كانت السلسلة النصية تتطابق مع نمط بسيط لعنوان بريد إلكتروني.



طريقتا Match و Matches — البحث عن التطابقات



ترجع Match أول تطابق، بينما ترجع Matches مجموعة من جميع التطابقات على شكل كائن MatchCollection.



string text = "السعر: 1500 روبل. الخصم: 200 روبل. الإجمالي: 1300 روبل.";string pattern = @"\\d+";

// التطابق الأولMatch firstMatch = Regex.Match(text, pattern);Console.WriteLine($"الرقم الأول: {firstMatch.Value}"); // 1500

// جميع التطابقاتMatchCollection allMatches = Regex.Matches(text, pattern);Console.WriteLine("جميع الأرقام:");foreach (Match match in allMatches){ Console.WriteLine($" - {match.Value}"); // 1500, 200, 1300}


لا يحتوي كائن Match على القيمة (Value) فحسب، بل يحتوي أيضًا على الموضع في السلسلة النصية (Index) والطول (Length).



طريقة Split — تقسيم السلسلة النصية



تقوم Regex.Split بتقسيم السلسلة النصية إلى مصفوفة من السلاسل الفرعية وفقًا لنمط محدد. هذا مشابه لـ String.Split، لكن مع دعم التعبيرات النمطية.



string data = "إيفان;25;موسكو;مبرمج";string pattern = @";";

string[] parts = Regex.Split(data, pattern);foreach (string part in parts){ Console.WriteLine(part);}// الإخراج:// إيفان// 25// موسكو// مبرمج


التجميع والتقاط البيانات



واحدة من أقوى الإمكانيات

المدونات

توصيات الكتب