مفهوم التعابير النمطية
التعابير النمطية يقال لها Regular Expressions أو RegEx و هي عبارة عن نصوص تحتوي على أحرف و رموز لها معاني محددة.
للدقة أكثر, كل حرف أو رمز نضعه في هذا النص يعني شيء معين.
إذاً, التعابير النمطية تستخدم بهدف البحث في النصوص بطريقة سهلة جداً بدل الحاجة إلى كتابة خوارزميات معقدة من أجل الوصول إلى النتيجة المرجوة.
و بالتالي يمكنك إستغلال التعابير النمطية في حال أردت البحث في النص عن شيء محدد بهدف إجراء تعديل أو تحديث عليه.
من أشهر الإستخدامات للتعابير النمطية هي عندما تطلب من المستخدم إدخال بريده الإلكتروني و إدخال كلمة سر.
عندها تجد أنك أثناء كتابة البريد الإلكتروني و كلمة المرور فإنه يظهر لك تنبيهات في حال لم تقم بإدخال بريد إلكتروني صحيح أو كلمة سر لها شكل معين.
فمثلاً تجد أنه يطلب منك وضع كلمة سر تتألف من ثمانية أحرف على الأقل و يجب أن تحتوي على حرف كبير, حرف صغير, رقم و رمز.
التعامل مع التعابير النمطية
re
هو موديول جاهز في بايثون يحتوي على دوال و ثوابت جاهزة مخصصة للتعامل مع التعابير النمطية.
لهذا السبب عليك تضمين هذا الموديول عندما تريد التعامل مع التعابير النمطية.
لتضمين الموديول re
نكتب السطر التالي.
import re
السلاسل المميزة
السلاسل المميزة ( Special Sequences ) عبارة عن مجموعة أحرف يصبح لها معنى خاص حين يتم وضعها بعد الرمز /
و لقد ذكرناهم في الجدول التالي.
الرمز |
إستخدامه |
مثال |
\w |
يطابق أي حرف بين a-z أو A-Z أو أي رقم بين 0-9 أو الرمز _ .
هذا الرمز يعتبر إختصار للتعبير النمطي [a-zA-Z0-9_] . |
شاهد المثال » |
\W |
يطابق أي أحرف ليس بين a-z أو A-Z أو رقم أو الرمز _ .
هذا الرمز يعتبر إختصار للتعبير النمطي [^a-zA-Z0-9_] . |
شاهد المثال » |
\d |
يطابق أي حرف يمثل رقم بين 0 و 9 .
هذا الرمز يعتبر إختصار للتعبير النمطي [0-9] . |
شاهد المثال » |
\D |
يطابق أي أحرف لا يمثل رقم بين 0 و 9 .
هذا الرمز يعتبر إختصار للتعبير النمطي [^0-9] . |
شاهد المثال » |
\s |
يطابق أي حرف يمثل مسافة فارغة.
هذا الرمز يعتبر إختصار للتعبير النمطي [ \t\n\r\f\v] . |
شاهد المثال » |
\S |
يطابق أي حرف لا يمثل مسافة فارغة.
هذا الرمز يعتبر إختصار للتعبير النمطي [^ \t\n\r\f\v] . |
شاهد المثال » |
\Z |
يطابق أي سلسلة أحرف نمررها قبله مع الأحرف الموجودة في نهاية النص. |
شاهد المثال » |
\A |
يطابق أي سلسلة أحرف نمررها بعده مع الأحرف الموجودة في بداية النص. |
شاهد المثال » |
\b |
يطابق أول أو آخر أي سلسلة أحرف تحتوي على أحرف بين a-z أو A-Z أو أي رقم بين 0-9 أو الرمز _ .
- في حال تم وضع التعبير في آخر سلسلة الأحرف فإنه يبحث عن تطابق موجود في آخر كل سلسلة أحرف غير مقطوعة بمسافة فارغة في النص.
- في حال تم وضع التعبير في أول سلسلة الأحرف فإنه يبحث عن تطابق موجود في أول كل سلسلة أحرف غير مقطوعة بمسافة فارغة في النص.
|
شاهد المثال » |
\B |
لا يطابق أول أو آخر أي سلسلة أحرف تحتوي على أحرف بين a-z أو A-Z أو أي رقم بين 0-9 أو الرمز _ .
- في حال تم وضع التعبير في آخر سلسلة الأحرف فإنه يبحث عن تطابق غير موجود قبل آخر كل سلسلة أحرف غير مقطوعة بمسافة فارغة في النص.
- في حال تم وضع التعبير في أول سلسلة الأحرف فإنه يبحث عن تطابق غير موجود بعد أول كل سلسلة أحرف غير مقطوعة بمسافة فارغة في النص.
|
شاهد المثال » |
إنتبه
الرمز \
يسمى Backslash, و هو Escape Character أي حرف له معنى خاص في بايثون كما لاحظت في الجدول السابق.
في حال كنت تريد البحث عن الحرف \
نفسه, فعليك معرفة أن مفسّر لغة بايثون يرا كل \
محرفين, أي يراه \\
.
و بالتالي سيكون عليك وضع \\\\
كلما كنت تقصد \
حتى يفهم مفسر لغة بايثون أنك تريد البحث عن هذا الحرف و لا تقصد شيء آخر.
إذا لم ترد فعل ذلك فيمكنك ببساطة إعتماد أسلوب يقال له Raw String, أي أن تضع الحرف r
قبل نص التعبير النمطي مباشرةً كالتالي r"\Bea"
.
طبعاً كنت تستطيع كتابة التعبير السابق هكذا أيضاً "\\Bea"
.
في النهاية, ننصحك باعتماد أسلوب الـ Raw String لأنه أسهل و أقل تعقيداً.
الكائن Match
الكائن Match
الذي ترجعه بعض دوال الموديول re
يوفر لك أيضاً أربع دوال أساسية للتعامل مع المعلومات التي يحتويها.
إسم الدالة مع تعريفها |
group()
ترجع سلسلة الأحرف التي تم إيجادها في النص و التي تم تخزينها في كائن الـ Match() الذي قام باستدعائها. |
start()
ترجع عدد صحيح يمثل Index أول حرف في سلسلة الأحرف التي تم إيجادها في النص و التي تم تخزينها في كائن الـ Match() الذي قام باستدعائها. |
end()
ترجع عدد صحيح يمثل Index آخر حرف في سلسلة الأحرف التي تم إيجادها في النص و التي تم تخزينها في كائن الـ Match() الذي قام باستدعائها. |
span()
تم تخزينها
ترجع tuple يمثل أين تم إيجاد سلسلة الأحرف التي تم تخزينها في كائن الـ Match() الذي قام باستدعائها.
هذا الـ tuple يحتوي على رقمين فقط. الرقم الأول يمثل Index أول حرف وجد عنده التطابق, الرقم الثاني يمثل Index آخر حرف وجد عنده التطابق. |
هنا وضعنا مثال شامل إستخدامنا فيه الدوال الأربعة المذكورة في الجدول.
شاهد المثال »