إذا كنت مبرمجًا ، فمن المحتمل أنك تعرف بالفعل ما هي التعبيرات العادية (regex). تم تنفيذ أنماط Regex في كل لغة برمجة سائدة تقريبًا ، ولكن لا يزال معظم المطورين لا يتعرفون على قوة وتعدد استخدامات هذه الأنماط.
يدور هذا الدليل حول التعبيرات العادية وكيف يمكنك استخدامها في لغة برمجة Python.
ما هي التعبيرات العادية؟
التعبيرات العادية هي أنماط تساعد المستخدم على مطابقة مجموعات الأحرف في الملفات النصية والسلاسل. يمكنك استخدام التعبيرات العادية لتصفية أو العثور على نمط معين في مخرجات أمر أو مستند.
هناك حالات مختلفة لاستخدام التعبيرات النمطية ، أشهرها الأمر grep في Linux. تتضمن التطبيقات الأخرى تصفية المعلومات مثل استخراج عناوين البريد الإلكتروني وأرقام الهواتف من ملف تفريغ البيانات.
السبب الرئيسي وراء ابتعاد العديد من المطورين عن التعبيرات العادية هو قلة الوعي بقوة مطابقة الأنماط. حتى أن البعض يجد التعبيرات النمطية محيرة بسبب الكم الهائل من الأحرف والتسلسلات المستخدمة في الأنماط.
مهما كان السبب ، فإن التعبيرات العادية هي وستكون أحد أهم جوانب البرمجة التي يجب أن يعرفها الجميع.
التعبيرات العادية: مطابقة الأحرف والتسلسلات
Regex هي لغة جديدة تمامًا في حد ذاتها. يفسر محرك regex أنماطًا تتكون من عدة أحرف مزودة بمعاني محددة. تتطابق العناصر الحرفية الأساسية مثل الأحرف الأبجدية الرقمية مع نفسها. لكن الأحرف المعقدة مثل $ ، * ، + ، {، إلخ. المساعدة في مطابقة الترتيب الأعلى.
- النجمة (*): يطابق الحرف السابق صفرًا أو أكثر من المرات. المعنى الحرفي للحرف سيكون "العنصر مضروبًا في عدد ن من المرات". على سبيل المثال ، إذا كان التعبير النمطي هو ABC *، فإن السلاسل المطابقة ستكون ab ، و abc ، و abcc ، و abccc ، و abcccc ، وما إلى ذلك. التعبير [قبل الميلاد]* سيطابق bc ، و bcbc ، و bcbc ، وما إلى ذلك.
- زائد (+): يتطابق مع الحرف السابق مرة واحدة أو أكثر. عمل + الحرف مشابه لـ *، لكن ال + يتجاهل الحرف النمط إذا لم يظهر الحرف. على سبيل المثال، abc + سيطابق abc و abcc و abccc وما إلى ذلك. ولكن ليس أب.
- علامة استفهام (؟): يتطابق مع الحرف السابق صفر أو مرة واحدة (مرات). على سبيل المثال ، النمط اي بي سي؟ سيتطابق مع ab و abc فقط.
- أنبوب (|): تستخدم كثنائي أو المشغل أو العامل. يطابق أيًا من الأحرف التي تسبق الأنبوب وتليه. على سبيل المثال، أ | ب سيطابق إما أ أو ب.
- نقطة (.): يتطابق مع شخصية غير معروفة هويتها. على سبيل المثال، أ سيطابق aac و abc و acc و a2c وما إلى ذلك.
- جزر (^): يطابق الحرف الأول في النمط. على سبيل المثال، ^ رع سيطابق الكلمات التي تبدأ بـ رع مثل Rabbit و Raccoon و Random.
- الدولار ($): يطابق الحرف الأخير في النمط. على سبيل المثال، $ سيطابق الكلمات التي تنتهي بـ ا مثل Van و Dan و Plan.
- واصلة (-): تستخدم لتحديد مجموعة من الأحرف. على سبيل المثال، [0-9] سيطابق جميع الأحرف الرقمية المكونة من رقم واحد.
التسلسلات الخاصة المستخدمة في أنماط التعبير العادي هي:
- \أ: تُرجع تطابقًا إذا كانت الأحرف التالية موجودة في بداية السلسلة. على سبيل المثال، \ أ سيطابق الكلمات التي تبدأ بـ ال مثل The و Them و They وما إلى ذلك.
- \ب: تُرجع تطابقًا إذا تم العثور على الحرف في بداية الكلمة أو في نهايتها. على سبيل المثال، \ bmad و جنون \ ب سوف تتطابق مع كلمات مثل مصنوع و بدوي على التوالى.
- \ب: تُرجع تطابقًا إذا لم يتم العثور على الحرف في بداية الكلمة أو نهايتها.
- \د: يطابق الأحرف الرقمية الموجودة في السلسلة. على سبيل المثال، /d* سيطابق أرقامًا مثل 1 ، 12 ، 1232 ، إلخ.
- \د: يتطابق مع الأحرف غير الرقمية في السلسلة. /د سيطابق a ، b ، c ، f ، إلخ.
- \س: يطابق حرف مسافة بيضاء في النص.
- \س: يطابق حرفًا غير مسافات بيضاء في النص.
- \ ث: تُرجع تطابقًا إذا كانت السلسلة تحتوي على أحرف أبجدية رقمية بما في ذلك الشرطات السفلية. على سبيل المثال، \ w سيطابق a ، b ، c ، d ، 1 ، 2 ، 3 ، إلخ.
- \ W: تُرجع تطابقًا إذا كانت السلسلة لا تحتوي على أحرف أبجدية رقمية أو شرطات سفلية.
- \ Z: يطابق الأحرف الموجودة في نهاية السلسلة. على سبيل المثال، نهاية \ Z سيطابق الكلمات التي تنتهي بـ نهاية مثل الانحناء ، الإصلاح ، التميل ، إلخ.
طرق بايثون للتعبيرات العادية
في Python ، فإن ملف إعادة توفر المكتبة جميع الوظائف والأدوات المساعدة اللازمة لتنفيذ regex في برامجك. لا يتعين عليك تنزيل المكتبة باستخدام نقطة لأنها تأتي مثبتة مسبقًا مع مترجم Python.
لاستيراد ملف إعادة Library في Python ، أضف الكود التالي إلى البرنامج النصي الخاص بك:
إعادة الاستيراد
لاحظ أنه أثناء تمرير التعبيرات العادية في Python ، نستخدم سلاسل خام لأنها لا تفسر الأحرف الخاصة مثل \ن و \ t بشكل مختلف.
تطابق()
ال مباراة العودة() تقوم الطريقة في Python بإرجاع كائن regex إذا وجد البرنامج تطابقًا في بداية السلسلة المحددة. تأخذ هذه الوظيفة وسيطتين أساسيتين:
re.match (نمط ، سلسلة)
...أين نمط هو التعبير النمطي و خيط هو النص الذي يحتاج إلى البحث.
ألق نظرة على مقتطف الشفرة أدناه.
إعادة الاستيراد
match = re.match (r'Word '، "هذه الجملة تحتوي على كلمة")
طباعة (تطابق)
ال ص قبل أن تشير السلسلة إلى السلسلة الأولية.
انتاج:
لا أحد
يعود الرمز المذكور أعلاه لا أحد لأن كلمة لم يكن موجودًا في بداية السلسلة.
إذا تم العثور على تطابق ، يمكنك طباعة المطابقة باستخدام مجموعة() الطريقة التي تنتمي إلى كائن regex.
إعادة الاستيراد
match = re.match (r'Word '، "Word يصعب قراءته")
طباعة (match.group (0))
انتاج:
كلمة
يبحث()
ال ابحاث() تأخذ الطريقة وسيطات مماثلة مثل re.match (). بينما تُرجع الدالة match () فقط المطابقات الموجودة في بداية السلسلة ، بحث() سيعيد التطابقات الموجودة في أي فهرس في السلسلة.
إعادة الاستيراد
match = re.search (r'Word '، "تحتوي هذه الجملة على كلمة. الكلمات صعبة القراءة. ")
طباعة (match.group (0))
نلاحظ أن تطابق() و بحث() أساليب ستعيد فقط نمط مطابق واحد. في الكود المذكور أعلاه ، كلمة يظهر مرتين. لكن ال بحث() ستطابق الوظيفة فقط التواجد الأول للكلمة.
كلمة
جد كل()
كما يمكنك التخمين بالفعل ، فإن ملف جد كل() طريقة إرجاع كل تطابق ممكن في السلسلة.
إعادة الاستيراد
match = re.search (r'Word '، "تحتوي هذه الجملة على كلمة. الكلمات صعبة القراءة. ")
لعنصر في المباراة:
طباعة (عنصر)
بدلاً من إرجاع كائن regex ، تُرجع الدالة findall () قائمة بجميع التطابقات. يمكنك تكرار القائمة باستخدام ملف للحلقة في بيثون.
انشق، مزق()
إذا كنت تريد تقسيم سلسلة إلى سلاسل فرعية باستخدام نمط كمحدد ، فعندئذٍ ينقسم() الوظيفة هي التي تحتاجها.
إعادة الاستيراد
Split = re.split (r'and '، "هذه الكلمة وذاك وهذا مختلفان.")
طباعة (تقسيم)
انتاج:
['هذه الكلمة "،" التي "،" هذه مختلفة. "]
الفرعية()
ال الفرعية() تسمح الطريقة للمستخدم باستبدال كلمة معينة بدلاً من النمط. يأخذ الحجج التالية.
re.sub (نمط ، استبدال ، سلسلة)
ضع في اعتبارك مقتطف الشفرة هذا:
إعادة الاستيراد
النتيجة = re.sub (r'and '،' or '، "يجب معاقبة ديف وهاري.")
طباعة (نتيجة)
انتاج:
يجب معاقبة ديف أو هاري.
تجميع ()
ال re.compile () الطريقة في إعادة مكتبة تسمح للمستخدم بتخزين نسخة مجمعة من نمط التعبير العادي في الذاكرة. بعد ذلك ، باستخدام الكائن المترجم ، يمكن للمستخدم تصفية تفريغ النص المحدد للأنماط المتطابقة بسرعة.
إعادة الاستيراد
pattern = re.compile ('Python')
match = pattern.findall ("Python هي لغة رائعة لكتابة البرامج النصية. بايثون سهلة التعلم. ")
طباعة (تطابق)
تُستخدم هذه الوظيفة بشكل أساسي لحفظ الأنماط التي تتطلب موارد كثيرة وتحتاج إلى الكثير من الوقت للتشغيل. يؤدي تجميع النموذج وحفظه ككائن مسبقًا إلى حل هذه المشكلة.
استفد من قوة Regex مع Python
عندما تعمل مع ملفات نصية وإخراج ، فإن regex أداة رائعة لتكون تحت تصرفك. يمكنك كتابة بعض التعليمات البرمجية بسرعة لتصفية أو استبدال أنماط معينة في المستند.
قد يكون حفظ جميع الأحرف وتسلسلات المطابقة أمرًا صعبًا إذا كنت بدأت للتو باستخدام regex. لتحسين التعبيرات العادية ، فإن الإشارة إلى قائمة الأحرف والأساليب والتسلسلات بين الحين والآخر سيساعدك بالتأكيد على المدى الطويل.
استخدم قائمة تعبيرات Python العادية هذه حتى تتمكن من تحسين استخدام لغة البرمجة متعددة الاستخدامات هذه.
اقرأ التالي
- برمجة
- برمجة
- بايثون
Deepesh هو محرر جونيور لنظام Linux في MUO. لقد كان يكتب محتوى إعلاميًا على الإنترنت لأكثر من 3 سنوات. في أوقات فراغه ، يستمتع بالكتابة والاستماع إلى الموسيقى ولعب الجيتار.
اشترك في نشرتنا الإخبارية
انضم إلى النشرة الإخبارية لدينا للحصول على نصائح تقنية ومراجعات وكتب إلكترونية مجانية وصفقات حصرية!
خطوة أخرى أيضا…!
يرجى تأكيد عنوان بريدك الإلكتروني في البريد الإلكتروني الذي أرسلناه لك للتو.