مفهوم التعابير النمطية في بايثون
في البداية, التعابير النمطية يقال لها Regular Expressions أو RegEx و هي عبارة عن نصوص تحتوي على أحرف و رموز لها معاني محددة.
للدقة أكثر, كل حرف أو رمز نضعه في هذا النص يعني شيء معين.
إذاً, التعابير النمطية تستخدم بهدف البحث في النصوص بطريقة سهلة جداً بدل الحاجة إلى كتابة خوارزميات معقدة من أجل الوصول إلى النتيجة المرجوة.
و بالتالي يمكنك إستغلال التعابير النمطية في حال أردت البحث في النص عن شيء محدد بهدف إجراء تعديل أو تحديث عليه.
.
من أشهر الإستخدامات للتعابير النمطية هي عندما تطلب من المستخدم إدخال بريده الإلكتروني و إدخال كلمة سر.
عندها تجد أنك أثناء كتابة البريد الإلكتروني و كلمة المرور فإنه يظهر لك تنبيهات في حال لم تقم بإدخال بريد إلكتروني صحيح أو كلمة سر لها شكل معين.
فمثلاً تجد أنه يطلب منك وضع كلمة سر تتألف من ثمانية أحرف على الأقل و يجب أن تحتوي على حرف كبير, حرف صغير, رقم و رمز.
التعامل مع التعابير النمطية
re
هو موديول جاهز في بايثون يحتوي على دوال و ثوابت جاهزة مخصصة للتعامل مع التعابير النمطية.
لهذا السبب عليك تضمين هذا الموديول عندما تريد التعامل مع التعابير النمطية.
لتضمين الموديول re
نكتب السطر التالي.
import re
دوال الموديول re
بعد تضمين الموديول re
نصبح قادرين على إستخدام الدوال الموجودة فيه و التي ذكرنا أهمها في الجدول التالي.
إسم الدالة مع تعريفها | |
---|---|
search(pattern, string, flags=0)
تبحث في النص الذي نمرره له مكان الباراميتر string لترى ما إذا كان يتطابق أو فيه جزء يتطابق مع التعبير النمطي الذي نمرره لها مكان الباراميتر pattern .في حال تم إيجاد جزء أو أكثر في النص يتطابق مع التعبير النمطي, تقوم بإرجاع كائن من الكلاس Match يحتوي على معلومات أول مكان في هذا النص تطابق مع التعبير النمطي.في حال لم يتم العثور على النص المراد البحث عنه ترجع None .شاهد المثال » |
|
findall(pattern, string, flags=0)
تبحث في النص الذي نمرره له مكان الباراميتر string لترى ما إذا كان يتطابق أو فيه جزء يتطابق مع التعبير النمطي الذي نمرره لها مكان الباراميتر pattern .في حال تم إيجاد جزء أو أكثر في النص يتطابق مع التعبير النمطي, ترجع list كل عنصر فيه يمثل الجزء الذي يتطابق مع التعبير النمطي.في حال لم يتم إيجاد أي تطابق, ترجع list فارغ.شاهد المثال » |
|
finditer(pattern, string, flags=0)
تبحث في النص الذي نمرره له مكان الباراميتر string لترى ما إذا كان يتطابق أو فيه جزء يتطابق مع التعبير النمطي الذي نمرره لها مكان الباراميتر pattern .في حال تم إيجاد جزء أو أكثر في النص يتطابق مع التعبير النمطي, ترجع iterator كل عنصر فيه عبارة عن كائن Match يمثل الجزء الذي يتطابق مع التعبير النمطي.في حال لم يتم إيجاد أي تطابق, ترجع list فارغ.شاهد المثال » |
|
split(pattern, string, maxsplit=0, flags=0)
ترجع نسخة من النص الذي نمرره لها مكان الباراميتر string مقسمة على شكل مصفوفة ( list ) من النصوص.مكان الباراميتر pattern نمرر تعبير نمطي يحدد الطريقة التي سيتم على أساسها تقسيم النص و وضع كل قسم فيه في عنصر واحد بداخل المصفوفة.في حال لم يتم العثور على النص المراد البحث عنه ترجع list فيه عنصر واحد يحتوي على كل النص الذي تم البحث فيه.مكان الباراميتر maxsplit يمكنك تمرير رقم يحدد إلى كم قسم تريد أن يتم تقسيم النص.شاهد المثال » |
|
sub(pattern, repl, string, count=0, flags=0)
ترجع نسخة من النص الذي نمرره لها مكان الباراميتر string مع تبديل كل جزئية فيها تتطابق مع التعبير النمطي الذي نمرره لها مكان الباراميتر pattern بالنص الذي نمرره لها مكان الباراميتر repl .مكان الباراميتر count يمكنك تمرير رقم أكبر من صفر يمثل أول كم جزئية يتم العثور عليها تريدها أن تتبدل.شاهد المثال » |
الأحرف المميزة في بايثون
الأحرف المميزة ( Special Characters ) عبارة عن رموز لها معنى خاص و لقد ذكرناهم في الجدول التالي.
الرمز | إستخدامه | مثال |
---|---|---|
^ |
يستخدم للتشييك على الأحرف الموضوعة في بداية كل سطر في النص. مثال: "^Hello" هذا التعبير يقصد منه هل النص أو كل سطر فيه يبدأ بكلمة Hello . |
شاهد المثال » |
$ |
يستخدم للتشييك على الأحرف الموضوعة في نهاية كل سطر في النص. مثال: "World$" هذا التعبير يقصد منه هل النص أو كل سطر فيه ينتهي بكلمة Hello . |
شاهد المثال » |
. |
يستخدم للإشارة إلى وجوب وجود أي حرف ما عدا الحرف /n الذي يشير إلى نهاية السطر.مثال: "He..o" هذا التعبير يقصد منه هل يوجد He و بعده حرفين, و بعده يوجد حرف o . |
شاهد المثال » |
+ |
يستخدم لمعرفة ما إذا كان الحرف الموضوع قبله موجود مرة واحدة على الأقل في النص. مثال: "ello+" هذا التعبير يقصد منه هل يوجد ell و بعده يوجد حرف o أو أكثر. |
شاهد المثال » |
* |
يستخدم في حال عدم الإكتراث ما إذا كان الحرف الموضوع قبله موجود مرة, عدة مرات أو غير موجود على الإطلاق في النص. مثال: "ello*" هذا التعبير يقصد منه هل يوجد ell و لا يهم إذا كان يوجد بعده حرف o أو أكثر. |
شاهد المثال » |
? |
يستخدم لمعرفة ما إذا كان الحرف الموضوع قبله موجود مرة واحدة أو غير موجود في النص. مثال: "ai?" هذا التعبير يقصد منه هل يوجد a يليه حرف i واحد. |
شاهد المثال » |
| |
يستخدم لمعرفة ما إذا كان النص الموضوع قبله أو النص الموضوع بعده موجود في النص. مثال: "Hello|Hi" هذا التعبير يقصد منه هل يوجد Hello أو Hi . |
شاهد المثال » |
{m} |
يستخدم لمعرفة ما إذا كان الحرف الموضوع قبله موجود في النص عدد محدد من المرات. مكان الحرف m نمرر عدد المرات.مثال: "al{2}" هذا التعبير يقصد منه هل يوجد a يليه حرفين l . |
شاهد المثال » |
{m,n} |
يستخدم لمعرفة ما إذا كان الحرف الموضوع قبله موجود في النص عدد مرات محصور بين عددين. مكان الحرف m نمرر عدد المرات الأقل, و مكان الحرف n نمرر عدد المرات الأكثر.مثال: "al{1, 2}" هذا التعبير يقصد منه هل يوجد a يليه حرف أو حرفين l . |
شاهد المثال » |
وضع set
من الإحتمالات في بايثون
القصد هنا هو أن تضع الرمز []
و بداخله تمرر مجموعة من الأحرف و الرموز الأخرى كما فعلنا في الجدول التالي.
الرمز | إستخدامه | مثال |
---|---|---|
[abc] |
هذا التعبير يقصد منه هل يوجد في النص الحرف a أو b أو c . |
شاهد المثال » |
[^abc] |
هذا التعبير يقصد منه هل يوجد في النص أي حرف غير الأحرف a و b و c . |
شاهد المثال » |
[a-f] |
هذا التعبير يقصد منه هل يوجد في النص أحد الأحرف الأبجدية الموجودة بين الحرف a و الحرف f .هنا كأننا قلنا: [abcdef] . |
شاهد المثال » |
[0123] |
هذا التعبير يقصد منه هل يوجد في النص الرقم 0 أو 1 أو 2 أو 3 . |
شاهد المثال » |
[0-9] |
هذا التعبير يقصد منه هل يوجد في النص أحد الأرقام الموجودة بين الرقم 0 و الرقم 9 .هنا كأننا قلنا: [0123456789] . |
شاهد المثال » |
[0-5][0-9] |
هذا التعبير يقصد منه هل يوجد في النص أي رقمين بين 00 و 59 . |
شاهد المثال » |
[a-zA-Z] |
هذا التعبير يقصد منه هل يوجد في النص أحد الأحرف الأبجدية الموجودة بين a و z , أو الموجودة بين A و Z .أي كأنك تحاول معرفة ما إن كان يوجد أي حرف من الأحرف الأبجدية سواء كان الحرف كبير ( Capital Letter ) أو صغير ( Small Letter ). | شاهد المثال » |
[+] |
هذا التعبير يقصد منه هل يوجد في النص الرمز + .أي هذا الرمز يعامل هنا كأنه حرف عادي و هذا الأمر ينطبق على باقي الرموز الأخرى مثل * , . , | , $ , ) , ( , { , } . | شاهد المثال » |
[a\-z] |
هذا التعبير يقصد منه هل يوجد الحرف a أو الرمز - أو الحرف z في النص.إذاً, هنا الرمز \ يجعل الحرف الذي يوضع بعده يعامل كأنه حرف عادي و ليس رمز له معنى خاص. | شاهد المثال » |
[a-] [-a] |
كلا التعبيرين يقصد منهما هل يوجد الحرف a أو الرمز - في النص.إذاً, عند عدم وضع الرمز - بين حرفين أو رقمين فإنه يعامل كأنه حرف عادي و ليس رمز له معنى خاص. | شاهد المثال » |
[^^] |
هذا التعبير يقصد منه هل يوجد في النص أي حرف أو رمز ما عدا الرمز ^ . | شاهد المثال » |
السلاسل المميزة في بايثون
السلاسل المميزة ( 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 آخر حرف وجد عنده التطابق. |
هنا وضعنا مثال شامل إستخدامنا فيه الدوال الأربعة المذكورة في الجدول.
مثال
# حتى نستطيع إستخدام الدوال الموجودة فيه re هنا قمنا بتضمين الموديول import re # هنا قمنا بتعريف النص الذي سنبحث فيه بعد قليل txt = "Python is an easy language to learn" # في النهاية سترجع نتيجة البحث .'e' ستبحث في النص عن أول كلمة تجدها تبدأ بالحرف search() الدالة # في حال لم تجد تطابق None في حال وجدت أي كلمة تطابق التعبير النمطي أو Match ككائن من الكلاس result = re.search(r"\be\w+", txt) # if سيتم تنفيذ أوامر الطباعة الموضوعة في الجملة - Match لأنه يحتوي كائن - None لا يحتوي على القيمة result بما أن الكائن if result: print(result.string) # هنا قمنا بطباعة النص الذي بحثنا فيها print(result.group()) # هنا قمنا بطباعة الكلمة التي تطابقت مع التعبير النمطي print(result.start()) # أول حرف تم عنده إيجاد التطابق Index هنا قمنا بطباعة print(result.end()) # آخر حرف تم عنده إيجاد التطابق Index هنا قمنا بطباعة print(result.span()) # أول و آخر حرف تم عندها إيجاد التطابق Index هنا قمنا بطباعة else: print("No match found!")
•سنحصل على النتيجة التالية عند تشغيل الملف Test
.
easy
13
17
(13, 17)
Python الدالة search()
تعريفها
تبحث في النص الذي نمرره له مكان الباراميتر string
لترى ما إذا كان يتطابق أو فيه جزء يتطابق مع التعبير النمطي الذي نمرره لها مكان الباراميتر pattern
.
في حال تم إيجاد جزء أو أكثر في النص يتطابق مع التعبير النمطي, تقوم بإرجاع كائن من الكلاس Match
يحتوي على معلومات أول مكان في هذا النص تطابق مع التعبير النمطي.
في حال لم يتم العثور على النص المراد البحث عنه ترجع None
.
بناؤها
search(pattern, string, flags=0)
باراميترات
مكان الباراميتر
string
نمرر الذي نريد البحث فيه.مكان الباراميتر
pattern
نمرر تعبير نمطي يمثل النص المراد البحث عنه.
قيمة الإرجاع
في حال تم إيجاد جزء أو أكثر في النص يتطابق مع التعبير النمطي, تقوم بإرجاع كائن من الكلاس Match
يحتوي على معلومات أول مكان في هذا النص تطابق مع التعبير النمطي.
في حال لم يتم العثور على النص المراد البحث عنه ترجع None
.
في المثال التالي التعبير النمطي ^Python.*learn*
معناه: هل النص يبدأ بكلمة Python
و ينتهي بكلمة learn
.
مثال
# حتى نستطيع إستخدام الدوال الموجودة فيه re هنا قمنا بتضمين الموديول import re # هنا قمنا بتعريف النص الذي سنبحث فيه بعد قليل txt = "Python is an easy language to learn" # Match أصبح يمثل كائن من الكلاس result فهذا يعني أن learn و ينتهي بكلمة Python بما أن النص يبدأ بكلمة result = re.search("^Python.*learn?", txt) # if سيتم تنفيذ دالة الطباعة الموضوع في الجملة - Match لأنه يحتوي كائن - None لا يحتوي على القيمة result بما أن الكائن if result: print("Yes, We found Match!") else: print("No match found!")
•سنحصل على النتيجة التالية عند تشغيل الملف Test
.
Python الدالة findall()
تعريفها
تبحث في النص الذي نمرره له مكان الباراميتر string
لترى ما إذا كان يتطابق أو فيه جزء يتطابق مع التعبير النمطي الذي نمرره لها مكان الباراميتر pattern
.
في حال تم إيجاد جزء أو أكثر في النص يتطابق مع التعبير النمطي, ترجع list
كل عنصر فيه يمثل الجزء الذي يتطابق مع التعبير النمطي.
في حال لم يتم إيجاد أي تطابق, ترجع list
فارغ.
بناؤها
findall(pattern, string, flags=0)
باراميترات
مكان الباراميتر
string
نمرر الذي نريد البحث فيه.مكان الباراميتر
pattern
نمرر تعبير نمطي يمثل النص المراد البحث عنه.
قيمة الإرجاع
في حال تم إيجاد جزء أو أكثر في النص يتطابق مع التعبير النمطي, ترجع list
كل عنصر فيه يمثل الجزء الذي يتطابق مع التعبير النمطي.
في حال لم يتم إيجاد أي تطابق, ترجع list
فارغ.
في المثال التالي التعبير النمطي \w*ea\w*
معناه: هل يوجد كلمة إنجليزية تحتوي على الحرفين ea
.
مثال
# حتى نستطيع إستخدام الدوال الموجودة فيه re هنا قمنا بتضمين الموديول import re # هنا قمنا بتعريف النص الذي سنبحث فيه بعد قليل txt = "Python is an easy language to learn" # يحتوي على الكلمات التي تم إيجادها list أصبح يمثل result فهذا يعني أن ea بما أن النص يوجد فيه أكثر من كلمة إنجليزية فيها الحرفين result = re.findall("\w*ea\w*", txt) # و من ثم طباعتها result الذي يقضي بالمرور على كل قيمة في الكائن if غير فارغ, سيتم تنفيذ محتوى الجملة list يمثل كائن result بما أن if result: for word in result: print(word) else: print("No match found!")
•سنحصل على النتيجة التالية عند تشغيل الملف Test
.
learn
Python الدالة finditer()
تعريفها
تبحث في النص الذي نمرره له مكان الباراميتر string
لترى ما إذا كان يتطابق أو فيه جزء يتطابق مع التعبير النمطي الذي نمرره لها مكان الباراميتر pattern
.
في حال تم إيجاد جزء أو أكثر في النص يتطابق مع التعبير النمطي, ترجع iterator
كل عنصر فيه عبارة عن كائن Match
يمثل الجزء الذي يتطابق مع التعبير النمطي.
في حال لم يتم إيجاد أي تطابق, ترجع list
فارغ.
بناؤها
finditer(pattern, string, flags=0)
باراميترات
مكان الباراميتر
string
نمرر الذي نريد البحث فيه.مكان الباراميتر
pattern
نمرر تعبير نمطي يمثل النص المراد البحث عنه.
قيمة الإرجاع
في حال تم إيجاد جزء أو أكثر في النص يتطابق مع التعبير النمطي, ترجع iterator
كل عنصر فيه عبارة عن كائن Match
يمثل الجزء الذي يتطابق مع التعبير النمطي.
في حال لم يتم إيجاد أي تطابق, ترجع list
فارغ.
في المثال التالي التعبير النمطي \w*ea\w*
معناه: هل يوجد كلمة إنجليزية تحتوي على الحرفين ea
.
مثال
# حتى نستطيع إستخدام الدوال الموجودة فيه re هنا قمنا بتضمين الموديول import re # هنا قمنا بتعريف النص الذي سنبحث فيه بعد قليل txt = "Python is an easy language to learn" # result فهذا يعني أن ea بما أن النص يوجد فيه أكثر من كلمة إنجليزية فيها الحرفين # فيه كل تفاصيل الكلمة التي تم إيجادها Match كل عنصر فيه يمثل كائن iterator أصبح يمثل result = re.finditer("\w*ea\w*", txt) # و من ثم طباعتها result الذي يقضي بالمرور على كل قيمة في الكائن if غير فارغ, سيتم تنفيذ محتوى الجملة iterator يمثل كائن result بما أن if result: for word in result: print(word) else: print("No match found!")
•سنحصل على النتيجة التالية عند تشغيل الملف Test
.
<_sre.SRE_Match object; span=(30, 35), Match='learn'>
Python الدالة split()
تعريفها
ترجع نسخة من النص الذي نمرره لها مكان الباراميتر string
مقسمة على شكل مصفوفة ( list
) من النصوص.
بناؤها
split(pattern, string, maxsplit=0, flags=0)
باراميترات
مكان الباراميتر
string
نمرر الذي نريد البحث فيه.مكان الباراميتر
pattern
نمرر تعبير نمطي يحدد الطريقة التي سيتم على أساسها تقسيم النص و وضع كل قسم فيه في عنصر واحد بداخل المصفوفة..مكان الباراميتر
maxsplit
يمكنك تمرير رقم يحدد إلى كم قسم تريد أن يتم تقسيم النص.
قيمة الإرجاع
ترجع نسخة من النص الذي نمرره لها مكان الباراميتر string
مقسمة على شكل مصفوفة ( list
) من النصوص.
في حال لم يتم العثور على النص المراد البحث عنه ترجع list
فيه عنصر واحد يحتوي على كل النص الذي تم البحث فيه.
في المثال التالي التعبير النمطي \s
معناه مسافة فارغة.
مثال
# حتى نستطيع إستخدام الدوال الموجودة فيه re هنا قمنا بتضمين الموديول import re # هنا قمنا بتعريف النص الذي سنبحث فيه بعد قليل txt = "Python is an easy language to learn" # result من الكلمات و من ثم تخزينها في الكائن list على أساس المسافات الفارغة. و هذا يعني أنه سيتم إنشاء txt هنا قمنا بتقسيم نص المتغير result = re.split("\s", txt) # و من ثم طباعتها result هنا قمنا بالمرور على كل قيمة في الكائن for word in result: print(word)
•سنحصل على النتيجة التالية عند تشغيل الملف Test
.
is
an
easy
language
to
learn
Python الدالة sub()
تعريفها
ترجع نسخة من النص الذي نمرره لها مكان الباراميتر string
مع تبديل كل جزئية فيها تتطابق مع التعبير النمطي الذي نمرره لها مكان الباراميتر pattern
بالنص الذي نمرره لها مكان الباراميتر repl
.
بناؤها
sub(pattern, repl, string, count=0, flags=0)
باراميترات
مكان الباراميتر
string
نمرر الذي نريد البحث فيه.مكان الباراميتر
pattern
نمرر تعبير نمطي يمثل النص المراد البحث عنه.مكان الباراميتر
repl
نمرر النص الذي نريد وضعه بدلاً من النص الذي تم البحث عنه في حال إيجاده.مكان الباراميتر
count
يمكنك تمرير رقم أكبر من صفر يمثل أول كم جزئية يتم العثور عليها تريدها أن تتبدل.
قيمة الإرجاع
ترجع نسخة من النص الذي نمرره لها مكان الباراميتر string
مع تبديل كل جزئية فيها تتطابق مع التعبير النمطي الذي نمرره لها مكان الباراميتر pattern
بالنص الذي نمرره لها مكان الباراميتر repl
.
في المثال التالي التعبير النمطي \s
معناه مسافة فارغة.
مثال
# حتى نستطيع إستخدام الدوال الموجودة فيه re هنا قمنا بتضمين الموديول import re # هنا قمنا بتعريف النص الذي سنبحث فيه بعد قليل txt = "Python is an easy language to learn" # result مع تبديل أول ثلاث مسافات فارغة فيها بالرمز '-' و من ثم تخزين هذا النص في المتغير txt نسخة من النص الموجود في المتغير sub() هنا سترجع الدالة result = re.sub("\s", '-', txt, 3) # result هنا قمنا بطباعة النص الذي تم تخزينه في المتغير print(result)
•سنحصل على النتيجة التالية عند تشغيل الملف Test
.
الرمز ^
في التعابير النمطية
تذكر: الرمز ^
يستخدم للتشييك على الأحرف الموضوعة في بداية كل سطر في النص.
مثال
# حتى نستطيع إستخدام الدوال الموجودة فيه re هنا قمنا بتضمين الموديول import re # هنا قمنا بتعريف النص الذي سنبحث فيه بعد قليل txt = "Hello World" # في لم يكن كذلك None و ترجع ,'Hello' في حال كان النص يبدأ بالكلمة Match ترجع كائن search() الدالة result = re.search("^Hello", txt) # if سيتم تنفيذ أوامر الطباعة الموجودة في الجملة 'Hello' حيث أن النص يبدأ بالكلمة Match يمثل كائن result بما أن if result: print("The string is starts with 'Hello'.") print('Returned Match object', result) else: print("No match found!")
•سنحصل على النتيجة التالية عند تشغيل الملف Test
.
Returned Match object <_sre.SRE_Match object; span=(0, 5), Match='Hello'>
Python الرمز $
في التعابير النمطية
تذكر: الرمز $
يستخدم للتشييك على الأحرف الموضوعة في نهاية كل سطر في النص.
مثال
# حتى نستطيع إستخدام الدوال الموجودة فيه re هنا قمنا بتضمين الموديول import re # هنا قمنا بتعريف النص الذي سنبحث فيه بعد قليل txt = "Hello World" # في لم يكن كذلك None و ترجع ,'World' في حال كان النص ينتهي بالكلمة Match ترجع كائن search() الدالة result = re.search("World$", txt) # if سيتم تنفيذ أوامر الطباعة الموجودة في الجملة 'World' حيث أن النص ينتهي بالكلمة Match يمثل كائن result بما أن if result: print("The string is ends with 'World'.") print('Returned Match object', result) else: print("No match found!")
•سنحصل على النتيجة التالية عند تشغيل الملف Test
.
Returned Match object <_sre.SRE_Match object; span=(6, 11), Match='World'>
Python الرمز .
في التعابير النمطية
تذكر: الرمز .
- أي النقطة العادية - يستخدم للإشارة إلى وجوب وجود أي حرف ما عدا الحرف /n
الذي يشير إلى نهاية السطر.
مثال
# حتى نستطيع إستخدام الدوال الموجودة فيه re هنا قمنا بتضمين الموديول import re # هنا قمنا بتعريف النص الذي سنبحث فيه بعد قليل txt = "Hello World" # list و سترجع نتيجة البحث ككائن نوعه 'o' يليهما حرفين عشوائيين, و تنتهي بالحرف ,'He' ستبحث عن كل كلمة تبدأ findall() الدالة result = re.findall("He..o", txt) # غير فارغ, سيتم طباعة ما يحتويه كما هو list يمثل كائن result بما أن if result: print(result) else: print("No match found!")
•سنحصل على النتيجة التالية عند تشغيل الملف Test
.
Python الرمز +
في التعابير النمطية
تذكر: الرمز +
يستخدم لمعرفة ما إذا كان الحرف الموضوع قبله موجود مرة واحدة على الأقل في النص.
مثال
# حتى نستطيع إستخدام الدوال الموجودة فيه re هنا قمنا بتضمين الموديول import re # هنا قمنا بتعريف النص الذي سنبحث فيه بعد قليل txt = "I like potato and tomato" # list أو أكثر. في النهاية سترجع نتيجة البحث ككائن نوعه 't' يليه حرف 'a' ستبحث عن كل حرف findall() الدالة result = re.findall("at+", txt) # غير فارغ, سيتم طباعة ما يحتويه كما هو list يمثل كائن result بما أن if result: print(result) else: print("No match found!")
•سنحصل على النتيجة التالية عند تشغيل الملف Test
.
تذكر: الرمز *
يستخدم في حال عدم الإكتراث ما إذا كان الحرف الموضوع قبله موجود مرة, عدة مرات أو غير موجود على الإطلاق في النص.
مثال
# حتى نستطيع إستخدام الدوال الموجودة فيه re هنا قمنا بتضمين الموديول import re # هنا قمنا بتعريف النص الذي سنبحث فيه بعد قليل txt = "I like potato and tomato" # list أو أكثر. في النهاية سترجع نتيجة البحث ككائن نوعه 't' يليه حرف و لا يهم إن كان يوجد بعده حرف 'a' ستبحث عن كل حرف findall() الدالة result = re.findall("at*", txt) # غير فارغ, سيتم طباعة ما يحتويه كما هو list يمثل كائن result بما أن if result: print(result) else: print("No match found!")
•سنحصل على النتيجة التالية عند تشغيل الملف Test
.
Python الرمز ?
في التعابير النمطية
تذكر: الرمز ?
يستخدم لمعرفة ما إذا كان الحرف الموضوع قبله موجود مرة واحدة أو غير موجود في النص.
مثال
# حتى نستطيع إستخدام الدوال الموجودة فيه re هنا قمنا بتضمين الموديول import re # هنا قمنا بتعريف النص الذي سنبحث فيه بعد قليل txt = "I like potato and tomato" # list أو أكثر. في النهاية سترجع نتيجة البحث ككائن نوعه 't' يليه حرف 'a' ستبحث عن كل حرف findall() الدالة result = re.findall("at?", txt) # غير فارغ, سيتم طباعة ما يحتويه كما هو list يمثل كائن result بما أن if result: print(result) else: print("No match found!")
•سنحصل على النتيجة التالية عند تشغيل الملف Test
.
تذكر: الرمز |
يستخدم لمعرفة ما إذا كان النص الموضوع قبله أو النص الموضوع بعده موجود في النص.
مثال
# حتى نستطيع إستخدام الدوال الموجودة فيه re هنا قمنا بتضمين الموديول import re # هنا قمنا بتعريف النص الذي سنبحث فيه بعد قليل txt = "Hello sister.. Hi brother" # list في النهاية سترجع نتيجة البحث ككائن نوعه .'Hi' و 'Hello' ستبحث عن كل findall() الدالة result = re.findall("Hello|Hi", txt) # غير فارغ, سيتم طباعة ما يحتويه كما هو list يمثل كائن result بما أن if result: print(result) else: print("No match found!")
•سنحصل على النتيجة التالية عند تشغيل الملف Test
.
Python الرمز {m}
في التعابير النمطية
تذكر: الرمز {m}
يستخدم لمعرفة ما إذا كان الحرف الموضوع قبله موجود في النص عدد محدد من المرات.
مكان الحرف m
نمرر عدد المرات.
مثال
# حتى نستطيع إستخدام الدوال الموجودة فيه re هنا قمنا بتضمين الموديول import re # هنا قمنا بتعريف النص الذي سنبحث فيه بعد قليل txt = "Lina, as a beginner you should study algorithms" # list في النهاية سترجع نتيجة البحث ككائن نوعه .'n' يليه حرفين 'i' ستبحث عن كل حرف findall() الدالة result = re.findall("in{2}", txt) # غير فارغ, سيتم طباعة ما يحتويه كما هو list يمثل كائن result بما أن if result: print(result) else: print("No match found!")
•سنحصل على النتيجة التالية عند تشغيل الملف Test
.
Python الرمز {m,n}
في التعابير النمطية
تذكر: الرمز {m,n}
يستخدم لمعرفة ما إذا كان الحرف الموضوع قبله موجود في النص عدد مرات محصور بين عددين.
مكان الحرف m
نمرر عدد المرات الأقل, و مكان الحرف n
نمرر عدد المرات الأكثر.
مثال
# حتى نستطيع إستخدام الدوال الموجودة فيه re هنا قمنا بتضمين الموديول import re # هنا قمنا بتعريف النص الذي سنبحث فيه بعد قليل txt = "Lina, as a beginner you should study algorithms" # list في النهاية سترجع نتيجة البحث ككائن نوعه .'n' يليه حرف أو حرفين 'i' ستبحث عن كل حرف findall() الدالة result = re.findall("in{1,2}", txt) # غير فارغ, سيتم طباعة ما يحتويه كما هو list يمثل كائن result بما أن if result: print(result) else: print("No match found!")
•سنحصل على النتيجة التالية عند تشغيل الملف Test
.
التعبير النمطي [abc]
في بايثون
تذكر: التعبير [abc]
يقصد منه هل يوجد في النص الحرف a
أو b
أو c
.
مثال
# حتى نستطيع إستخدام الدوال الموجودة فيه re هنا قمنا بتضمين الموديول import re # هنا قمنا بتعريف النص الذي سنبحث فيه بعد قليل txt = "No pain, no gain" # list في النهاية سترجع نتيجة البحث ككائن نوعه .'c' أو 'b' أو 'a' ستبحث في النص عن كل حرف findall() الدالة result = re.findall("[abc]", txt) # غير فارغ, سيتم طباعة ما يحتويه كما هو list يمثل كائن result بما أن if result: print(result) else: print("No match found!")
•سنحصل على النتيجة التالية عند تشغيل الملف Test
.
التعبير النمطي [^abc]
في بايثون
تذكر: التعبير [^abc]
يقصد منه هل يوجد في النص أي حرف غير الأحرف a
و b
و c
.
مثال
# حتى نستطيع إستخدام الدوال الموجودة فيه re هنا قمنا بتضمين الموديول import re # هنا قمنا بتعريف النص الذي سنبحث فيه بعد قليل txt = "No pain, no gain" # list في النهاية سترجع نتيجة البحث ككائن نوعه .'c' و 'b' و 'a' ستبحث في النص عن أي حرف ما عدا الأحرف findall() الدالة result = re.findall("[^abc]", txt) # غير فارغ, سيتم طباعة ما يحتويه كما هو list يمثل كائن result بما أن if result: print(result) else: print("No match found!")
•سنحصل على النتيجة التالية عند تشغيل الملف Test
.
التعبير النمطي [a-f]
في بايثون
تذكر: التعبير [a-f]
يقصد منه هل يوجد في النص أحد الأحرف الأبجدية الموجودة بين الحرف a
و الحرف f
.
مثال
# حتى نستطيع إستخدام الدوال الموجودة فيه re هنا قمنا بتضمين الموديول import re # هنا قمنا بتعريف النص الذي سنبحث فيه بعد قليل txt = "Alphabet are easy to remember" # list في النهاية سترجع نتيجة البحث ككائن نوعه .'f' و 'a' ستبحث في النص عن أي حرف بين الحرفين findall() الدالة result = re.findall("[a-f]", txt) # غير فارغ, سيتم طباعة ما يحتويه كما هو list يمثل كائن result بما أن if result: print(result) else: print("No match found!")
•سنحصل على النتيجة التالية عند تشغيل الملف Test
.
التعبير النمطي [0123]
في بايثون
تذكر: التعبير [0123]
يقصد منه هل يوجد في النص الرقم 0
أو 1
أو 2
أو 3
.
مثال
# حتى نستطيع إستخدام الدوال الموجودة فيه re هنا قمنا بتضمين الموديول import re # هنا قمنا بتعريف النص الذي سنبحث فيه بعد قليل txt = "If you have an array of 4 elements. This means that first index in it is 0 and last index is 3" # list .ستبحث في النص عن كل رقم '0' و '1' و '2' و '3'. في النهاية سترجع نتيجة البحث ككائن نوعه findall() الدالة result = re.findall("[0123]", txt) # غير فارغ, سيتم طباعة ما يحتويه كما هو list يمثل كائن result بما أن if result: print(result) else: print("No match found!")
•سنحصل على النتيجة التالية عند تشغيل الملف Test
.
التعبير النمطي [0-9]
في بايثون
تذكر: التعبير [0-9]
يقصد منه يقصد منه هل يوجد في النص أحد الأرقام الموجودة بين الرقم 0
و الرقم 9
.
مثال
# حتى نستطيع إستخدام الدوال الموجودة فيه re هنا قمنا بتضمين الموديول import re # هنا قمنا بتعريف النص الذي سنبحث فيه بعد قليل txt = "This tutorial is written in 2019" # list .ستبحث في النص عن كل رقم بين '0' و '9'. في النهاية سترجع نتيجة البحث ككائن نوعه findall() الدالة result = re.findall("[0-9]", txt) # غير فارغ, سيتم طباعة ما يحتويه كما هو list يمثل كائن result بما أن if result: print(result) else: print("No match found!")
•سنحصل على النتيجة التالية عند تشغيل الملف Test
.
التعبير النمطي [0-5][0-9]
في بايثون
تذكر: التعبير [0-5][0-9]
يقصد منه هل يوجد في النص أي رقمين بين 00
و 59
.
مثال
# حتى نستطيع إستخدام الدوال الموجودة فيه re هنا قمنا بتضمين الموديول import re # هنا قمنا بتعريف النص الذي سنبحث فيه بعد قليل txt = "60 will not Match, but 07 and 59 will be Matched" # list .ستبحث في النص عن كل رقم بين '00' و '59'. في النهاية سترجع نتيجة البحث ككائن نوعه findall() الدالة result = re.findall("[0-5][0-9]", txt) # غير فارغ, سيتم طباعة ما يحتويه كما هو list يمثل كائن result بما أن if result: print(result) else: print("No match found!")
•سنحصل على النتيجة التالية عند تشغيل الملف Test
.
التعبير النمطي [a-zA-Z]
في بايثون
تذكر: التعبير [a-zA-Z]
يقصد منه هل يوجد في النص أحد الأحرف الأبجدية الموجودة بين a
و z
, أو الموجودة بين A
و Z
.
مثال
# حتى نستطيع إستخدام الدوال الموجودة فيه re هنا قمنا بتضمين الموديول import re # هنا قمنا بتعريف النص الذي سنبحث فيه بعد قليل txt = "Today, last version of Python is 3.7.2" # list في النهاية سترجع نتيجة البحث ككائن نوعه .'Z' و 'A' و بين ,'z' و 'a' تبحث في النص عن كل حرف أبجدي بين findall() الدالة result = re.findall("[a-zA-Z]", txt) # غير فارغ, سيتم طباعة ما يحتويه كما هو list يمثل كائن result بما أن if result: print(result) else: print("No match found!")
•سنحصل على النتيجة التالية عند تشغيل الملف Test
.
[+]
في بايثون
تذكر: التعبير [+]
يقصد منه هل يوجد في النص الرمز +
.
أي هذا الرمز يعامل هنا كأنه حرف عادي و هذا الأمر ينطبق على باقي الرموز الأخرى مثل *
, .
, |
, $
, )
, (
, {
, }
.
مثال
# حتى نستطيع إستخدام الدوال الموجودة فيه re هنا قمنا بتضمين الموديول import re # هنا قمنا بتعريف النص الذي سنبحث فيه بعد قليل txt = "1 + 3 = 5" # list .ستبحث في النص عن كل رمز '+' و كل رمز '=' و كل رقم بين '0' و '9'. في النهاية سترجع نتيجة البحث ككائن نوعه findall() الدالة result = re.findall("[+=0-9]", txt) # غير فارغ, سيتم طباعة ما يحتويه كما هو list يمثل كائن result بما أن if result: print(result) else: print("No match found!")
•سنحصل على النتيجة التالية عند تشغيل الملف Test
.
التعبير النمطي [a\-z]
في بايثون
تذكر: التعبير [a\-z]
يقصد منه هل يوجد الحرف a
أو الرمز -
أو الحرف z
في النص.
إذاً, هنا الرمز \
يجعل الحرف الذي يوضع بعده يعامل كأنه حرف عادي و ليس رمز له معنى خاص.
مثال
# حتى نستطيع إستخدام الدوال الموجودة فيه re هنا قمنا بتضمين الموديول import re # هنا قمنا بتعريف النص الذي سنبحث فيه بعد قليل txt = "a - b = c" # list في النهاية سترجع نتيجة البحث ككائن نوعه .'z' و رمز '-' و حرف'a' ستبحث في النص عن كل حرف findall() الدالة result = re.findall("[a\-z]", txt) # غير فارغ, سيتم طباعة ما يحتويه كما هو list يمثل كائن result بما أن if result: print(result) else: print("No match found!")
•سنحصل على النتيجة التالية عند تشغيل الملف Test
.
التعبير النمطي [a-]
و [-a]
في بايثون
تذكر: المقصود من كلا التعبيرين [a-]
و [-a]
هو هل يوجد الحرف a
أو الرمز -
في النص.
إذاً, عند عدم وضع الرمز -
بين حرفين أو رقمين فإنه يعامل كأنه حرف عادي و ليس رمز له معنى خاص.
مثال
# حتى نستطيع إستخدام الدوال الموجودة فيه re هنا قمنا بتضمين الموديول import re # هنا قمنا بتعريف النص الذي سنبحث فيه بعد قليل txt = "a - b = c" # list و رمز '-'. في النهاية سترجع نتيجة البحث ككائن نوعه 'a' ستبحث في النص عن كل حرف findall() الدالة result = re.findall("[a-]", txt) # غير فارغ, سيتم طباعة ما يحتويه كما هو list يمثل كائن result بما أن if result: print(result) else: print("No match found!")
•سنحصل على النتيجة التالية عند تشغيل الملف Test
.
التعبير النمطي [^^]
في بايثون
تذكر: التعبير [^abc]
يقصد منه هل يوجد في النص أي حرف أو رمز ما عدا الرمز ^
.
مثال
# حتى نستطيع إستخدام الدوال الموجودة فيه re هنا قمنا بتضمين الموديول import re # هنا قمنا بتعريف النص الذي سنبحث فيه بعد قليل txt = "5^2=10" # list ستبحث في النص عن أي حرف أو رمز ما عدا الرمز '^'. في النهاية سترجع نتيجة البحث ككائن نوعه findall() الدالة result = re.findall("[^^]", txt) # غير فارغ, سيتم طباعة ما يحتويه كما هو list يمثل كائن result بما أن if result: print(result) else: print("No match found!")
•سنحصل على النتيجة التالية عند تشغيل الملف Test
.
التعبير النمطي \w
في بايثون
تذكر: التعبير \w
يطابق أي حرف بين a-z
أو A-Z
أو أي رقم بين 0-9
أو الرمز _
.
و هذا الرمز يعتبر إختصار للتعبير النمطي [a-zA-Z0-9_]
.
مثال
# حتى نستطيع إستخدام الدوال الموجودة فيه re هنا قمنا بتضمين الموديول import re # هنا قمنا بتعريف النص الذي سنبحث فيه بعد قليل txt = "Python 3 is amazing" # list في النهاية سترجع نتيجة البحث ككائن نوعه .'Z' و 'A' و بين ,'z' و 'a' تبحث في النص عن كل حرف أبجدي بين findall() الدالة result = re.findall("\w", txt) # غير فارغ, سيتم طباعة ما يحتويه كما هو list يمثل كائن result بما أن if result: print(result) else: print("No match found!")
•سنحصل على النتيجة التالية عند تشغيل الملف Test
.
التعبير النمطي \W
في بايثون
تذكر: التعبير \W
يطابق أي أحرف ليس بين a-z
أو A-Z
أو رقم أو الرمز _
.
و هذا الرمز يعتبر إختصار للتعبير النمطي [^a-zA-Z0-9_]
.
مثال
# حتى نستطيع إستخدام الدوال الموجودة فيه re هنا قمنا بتضمين الموديول import re # هنا قمنا بتعريف النص الذي سنبحث فيه بعد قليل txt = "Python 3 is amazing" # list في النهاية سترجع نتيجة البحث ككائن نوعه .'Z' و 'A' و بين ,'z' و 'a' تبحث في النص عن كل حرف أبجدي بين findall() الدالة result = re.findall("\W", txt) # غير فارغ, سيتم طباعة ما يحتويه كما هو list يمثل كائن result بما أن if result: print(result) else: print("No match found!")
•سنحصل على النتيجة التالية عند تشغيل الملف Test
.
التعبير النمطي \d
في بايثون
تذكر: التعبير \d
يطابق أي حرف يمثل رقم بين 0
و 9
.
و هذا الرمز يعتبر إختصار للتعبير النمطي [0-9]
.
مثال
# حتى نستطيع إستخدام الدوال الموجودة فيه re هنا قمنا بتضمين الموديول import re # هنا قمنا بتعريف النص الذي سنبحث فيه بعد قليل txt = "Python 3" # list .ستبحث في النص عن كل حرف يمثل رقم بين '0' و '9'. في النهاية سترجع نتيجة البحث ككائن نوعه findall() الدالة result = re.findall("\d", txt) # غير فارغ, سيتم طباعة ما يحتويه كما هو list يمثل كائن result بما أن if result: print(result) else: print("No match found!")
•سنحصل على النتيجة التالية عند تشغيل الملف Test
.
التعبير النمطي \D
في بايثون
تذكر: التعبير \D
يطابق أي أحرف لا يمثل رقم بين 0
و 9
.
و هذا الرمز يعتبر إختصار للتعبير النمطي [^0-9]
.
مثال
# حتى نستطيع إستخدام الدوال الموجودة فيه re هنا قمنا بتضمين الموديول import re # هنا قمنا بتعريف النص الذي سنبحث فيه بعد قليل txt = "Python 3" # list .ستبحث في النص عن كل حرف لا يمثل رقم بين '0' و '9'. في النهاية سترجع نتيجة البحث ككائن نوعه findall() الدالة result = re.findall("\D", txt) # غير فارغ, سيتم طباعة ما يحتويه كما هو list يمثل كائن result بما أن if result: print(result) else: print("No match found!")
•سنحصل على النتيجة التالية عند تشغيل الملف Test
.
التعبير النمطي \s
في بايثون
تذكر: التعبير \s
يطابق أي حرف يمثل مسافة فارغة.
و هذا الرمز يعتبر إختصار للتعبير النمطي [ \t\n\r\f\v]
.
مثال
# حتى نستطيع إستخدام الدوال الموجودة فيه re هنا قمنا بتضمين الموديول import re # هنا قمنا بتعريف النص الذي سنبحث فيه بعد قليل txt = "Python 3" # list .ستبحث في النص عن كل حرف يمثل مسافة فارغة. في النهاية سترجع نتيجة البحث ككائن نوعه findall() الدالة result = re.findall("\s", txt) # غير فارغ, سيتم طباعة ما يحتويه كما هو list يمثل كائن result بما أن if result: print(result) else: print("No match found!")
•سنحصل على النتيجة التالية عند تشغيل الملف Test
.
التعبير النمطي \S
في بايثون
تذكر: التعبير \S
يطابق أي حرف لا يمثل مسافة فارغة.
و هذا الرمز يعتبر إختصار للتعبير النمطي [^ \t\n\r\f\v]
.
مثال
# حتى نستطيع إستخدام الدوال الموجودة فيه re هنا قمنا بتضمين الموديول import re # هنا قمنا بتعريف النص الذي سنبحث فيه بعد قليل txt = "Python 3" # list .ستبحث في النص عن كل حرف لا يمثل مسافة فارغة. في النهاية سترجع نتيجة البحث ككائن نوعه findall() الدالة result = re.findall("\S", txt) # غير فارغ, سيتم طباعة ما يحتويه كما هو list يمثل كائن result بما أن if result: print(result) else: print("No match found!")
•سنحصل على النتيجة التالية عند تشغيل الملف Test
.
التعبير النمطي \Z
في بايثون
تذكر: التعبير \Z
يطابق أي سلسلة أحرف نمررها قبله مع الأحرف الموجودة في نهاية النص.
مثال
# حتى نستطيع إستخدام الدوال الموجودة فيه re هنا قمنا بتضمين الموديول import re # هنا قمنا بتعريف النص الذي سنبحث فيه بعد قليل txt = "Hello World" # None و في حال لم يكن كذلك ترجع Match في حال كان كذلك ترجع كائن .'ld' تبحث في النص لترى ما إن كان ينتهي بـ search() الدالة result = re.search("ld\Z", txt) # if سيتم تنفيذ أمر الطباعة الموضوع في الجملة Match يمثل كائن result بما أن if result: print('Match found!') else: print("No match found!")
•سنحصل على النتيجة التالية عند تشغيل الملف Test
.
التعبير النمطي \A
في بايثون
تذكر: التعبير \A
يطابق أي سلسلة أحرف نمررها بعده مع الأحرف الموجودة في بداية النص.
مثال
# حتى نستطيع إستخدام الدوال الموجودة فيه re هنا قمنا بتضمين الموديول import re # هنا قمنا بتعريف النص الذي سنبحث فيه بعد قليل txt = "Hello World" # None و في حال لم يكن كذلك ترجع Match في حال كان كذلك ترجع كائن .'ld' تبحث في النص لترى ما إن كان ينتهي بـ search() الدالة result = re.search("\AHe", txt) # if سيتم تنفيذ أمر الطباعة الموضوع في الجملة Match يمثل كائن result بما أن if result: print('Match found!') else: print("No match found!")
•سنحصل على النتيجة التالية عند تشغيل الملف Test
.
التعبير النمطي \b
في بايثون
تذكر: التعبير \b
يطابق أول أو آخر أي سلسلة أحرف تحتوي على أحرف بين a-z
أو A-Z
أو أي رقم بين 0-9
أو الرمز _
.
في حال تم وضع التعبير في آخر سلسلة الأحرف فإنه يبحث عن تطابق موجود في آخر كل سلسلة أحرف غير مقطوعة بمسافة فارغة في النص.
في حال تم وضع التعبير في أول سلسلة الأحرف فإنه يبحث عن تطابق موجود في أول كل سلسلة أحرف غير مقطوعة بمسافة فارغة في النص.
في المثال التالي سنضع الرمز \b
في أول التعبير النمطي.
إنتبه يجب وضع الحرف r
كما فعلنا قبل نص التعبير النمطي حتى يستطيع مفسر لغة بايثون أن يميز بين الرمز \b
و الأحرف الموضوعة بضعه لأننا لا نريده أن يعامل الرمز \b
كمعاملة الأحرف العادية.
المثال الأول
# حتى نستطيع إستخدام الدوال الموجودة فيه re هنا قمنا بتضمين الموديول import re # هنا قمنا بتعريف النص الذي سنبحث فيه بعد قليل txt = "Python is an easy language to learn" # list في النهاية سترجع نتيجة البحث ككائن نوعه .'ea' ستبحث في النص عن كل كلمة تبدأ بـ findall() الدالة result = re.findall(r"\bea", txt) # غير فارغ, سيتم طباعة ما يحتويه كما هو list يمثل كائن result بما أن if result: print(result) else: print("No match found!")
•سنحصل على النتيجة التالية عند تشغيل الملف Test
.
في المثال التالي سنضع الرمز \b
في آخر التعبير النمطي.
إنتبه يجب وضع الحرف r
كما فعلنا قبل نص التعبير النمطي حتى يستطيع مفسر لغة بايثون أن يميز بين الرمز \b
و الأحرف الموضوعة بضعه لأننا لا نريده أن يعامل الرمز \b
كمعاملة الأحرف العادية.
المثال الثاني
# حتى نستطيع إستخدام الدوال الموجودة فيه re هنا قمنا بتضمين الموديول import re # هنا قمنا بتعريف النص الذي سنبحث فيه بعد قليل txt = "Python is an easy language to learn" # list في النهاية سترجع نتيجة البحث ككائن نوعه .'n' ستبحث في النص عن كل كلمة تنتهي بـ findall() الدالة result = re.findall(r"n\b", txt) # غير فارغ, سيتم طباعة ما يحتويه كما هو list يمثل كائن result بما أن if result: print(result) else: print("No match found!")
•سنحصل على النتيجة التالية عند تشغيل الملف Test
.
التعبير النمطي \B
في بايثون
تذكر: التعبير \B
لا يطابق أول أو آخر أي سلسلة أحرف تحتوي على أحرف بين a-z
أو A-Z
أو أي رقم بين 0-9
أو الرمز _
.
في حال تم وضع التعبير في آخر سلسلة الأحرف فإنه يبحث عن تطابق غير موجود قبل آخر كل سلسلة أحرف غير مقطوعة بمسافة فارغة في النص.
في حال تم وضع التعبير في أول سلسلة الأحرف فإنه يبحث عن تطابق غير موجود بعد أول كل سلسلة أحرف غير مقطوعة بمسافة فارغة في النص.
في المثال التالي سنضع الرمز \B
في أول التعبير النمطي.
إنتبه يجب وضع الحرف r
كما فعلنا قبل نص التعبير النمطي حتى يستطيع مفسر لغة بايثون أن يميز بين الرمز \B
و الأحرف الموضوعة بضعه لأننا لا نريده أن يعامل الرمز \B
كمعاملة الأحرف العادية.
المثال الأول
# حتى نستطيع إستخدام الدوال الموجودة فيه re هنا قمنا بتضمين الموديول import re # هنا قمنا بتعريف النص الذي سنبحث فيه بعد قليل txt = "Python is an easy language to learn" # list لكنها لا تنتهي بهما. في النهاية سترجع نتيجة البحث ككائن نوعه 'ea' ستبحث في النص عن كل كلمة تحتوي على الحرفين findall() الدالة result = re.findall(r"\Bea", txt) # غير فارغ, سيتم طباعة ما يحتويه كما هو list يمثل كائن result بما أن if result: print(result) else: print("No match found!")
•سنحصل على النتيجة التالية عند تشغيل الملف Test
.
في المثال التالي سنضع الرمز \B
في آخر التعبير النمطي.
إنتبه يجب وضع الحرف r
كما فعلنا قبل نص التعبير النمطي حتى يستطيع مفسر لغة بايثون أن يميز بين الرمز \B
و الأحرف الموضوعة بضعه لأننا لا نريده أن يعامل الرمز \B
كمعاملة الأحرف العادية.
المثال الثاني
# حتى نستطيع إستخدام الدوال الموجودة فيه re هنا قمنا بتضمين الموديول import re # هنا قمنا بتعريف النص الذي سنبحث فيه بعد قليل txt = "Python is an easy language to learn" # list لكنها لا تنتهي به. في النهاية سترجع نتيجة البحث ككائن نوعه 'n' ستبحث في النص عن كل كلمة تحتوي على الحرف findall() الدالة result = re.findall(r"n\B", txt) # غير فارغ, سيتم طباعة ما يحتويه كما هو list يمثل كائن result بما أن if result: print(result) else: print("No match found!")
•سنحصل على النتيجة التالية عند تشغيل الملف Test
.