مكتبة re في بايثون
مكتبة re في بايثون تستخدم للتعامل مع التعابير العادية (Regular Expressions) وهي مكتبة قوية يمكن استخدامها في معالجة النصوص والبحث عن الأنماط المحددة داخل النص.
لإستخدام هذه المكتبة، يجب عليك استيرادها في بداية البرنامج باستخدام الأمرi
import re
ثم يمكنك استخدام دوال المكتبة مثل search و match و findall للبحث عن النصوص المطلوبة. مثلاً، يمكن استخدام الكود التالي للبحث عن كلمة "Python" في نص معين:
import re
text = "Python is a great programming language"
pattern = "Python"
match = re.search(pattern, text)
if match:
print("Found at index", match.start())
else:
print("Not found")
في هذا المثال، تم إنشاء متغير text الذي يحتوي على النص الذي سيتم البحث فيه، ثم تم تعريف النمط الذي نريد البحث عنه في متغير pattern . بعد ذلك، تم استخدام دالة search للبحث عن النمط في النص، ثم تم فحص النتيجة باستخدام شرط if. إذا تم العثور على النمط، سيتم طباعة رسالة تفيد بذلك مع ظهور الفهرس الأول للنمط المطابق. وإذا لم يتم العثور على النمط، سيتم طباعة رسالة خطأ.
دوال مكتبة re في بايثون
مكتبة re في بايثون تستخدم للعمل مع التعابير العادية (Regular Expressions) وهي دوال تستخدم للبحث والاستخراج والتعديل على النصوص بطريقة مرنة وقوية.
بعض أهم الدوال المتوفرة في هذه المكتبة:
re.search(pattern, string, flags=0)
- - يبحث عن النمط pattern في string ويعيد النتيجة الأولى التي تم العثور عليها.
re.match(pattern, string, flags=0)
- - يبحث عن النمط pattern في بداية string ويعيد النتيجة الأولى التي تم العثور عليها.
re.findall(pattern, string, flags=0)
- - يعيد قائمة بجميع النتائج الغير متداخلة التي تم العثور عليها في string.
re.sub(pattern, repl, string, count=0, flags=0)
- - يقوم بالبحث في string عن pattern ثم يستبدل النتيجة بـ repl ويعيد النص الجديد.
re.split(pattern, string, maxsplit=0, flags=0)
- - يقوم بتقسيم النص string بناءً على pattern المعطى ويعيد قائمة بالقيم المقسمة.
هذه هي بعض الدوال الأساسية المتاحة في مكتبة re في بايثون. يمكن استخدام هذه الدوال للقيام بعمليات مختلفة على النصوص، مثل البحث عن أنماط محددة، أو استبدال أجزاء من النص، أو تقسيم النص إلى أجزاء مختلفة.
re.search
re.search هي وظيفة في بايثون تستخدم للبحث عن تطابق بين نمط معين (الذي يتم تعريفه باستخدام الصيغ العادية) وسلسلة محددة. إذا تم العثور على تطابق ، فإنه يعيد كائنًا يحتوي على المعلومات حول المباراة ، وإلا فإنه يعيد None .
فيما يلي مثال على استخدام re.search للعثور على قيمة رقمية داخل سلسلة نصية:
import re
text = "The price of the product is $25.99"match = re.search(r'\$\d+\.\d+', text)
if match:
print("Price found:", match.group(0))
else:
print("Price not found")
يستخدم هذا المثال الصيغة العادية \$\d+\.\d+ للعثور على أي سلسلة تبدأ بعلامة الدولار $ وتتبعها أرقام عشرية. إذا تم العثور على مباراة ، يتم طباعة قيمة السعر الموجودة في النص.
re.match
تستخدم دالة re.match() في بايثون لفحص ما إذا كان نص معين يطابق نمطًا محددًا باستخدام تعبيرات العبارات العادية (Regex). وتأخذ هذه الدالة نمط regex ونصًا للبحث عنه ، ثم تعيد المطابقة إذا تطابق النمط بالنص أو None إذا لم يتطابق.
فيما يلي مثال بسيط يستخدم re.match() :
import re
pattern = r"hello"
text = "hello world"
match = re.match(pattern, text)
if match:
print("Match found!")
else:
print("Match not found.")
في هذا المثال، يتم تعريف نمط regex r"hello" ويتم تطبيقه على النص "hello world" باستخدام re.match() ، حيث يتطابق النص مع النمط ويتم طباعة "Match found!"
re.findall
re.findall هي وظيفة موجودة في مكتبة re في بايثون، تستخدم للحصول على جميع النتائج المطابقة لنمط محدد في سلسلة نصية. يمكن استخدامها كالتالي:
import re
text = "The quick brown fox jumps over the lazy dog"
pattern = "the"
matches = re.findall(pattern, text, re.IGNORECASE)
print(matches)
ستكون النتيجة:
['The', 'the']
تم استخدام re.IGNORECASE لتجاهل حالة الأحرف الكبيرة والصغيرة.
re.sub
re.sub هي وظيفة في مكتبة re في بايثون وتستخدم للبحث عن نمط معيّن في سلسلة النصية واستبداله بنص آخر.
إليك مثال على استخدام re.sub :
import re
text = "The quick brown fox jumps over the lazy dog."
new_text = re.sub(r"fox", "cat", text)
print(new_text)
في هذا المثال، يتم استخدام re.sub للبحث عن النمط "fox" في النص واستبداله بالنص "cat" ، وبعدها يتم طباعة النص الجديد
"The quick brown cat jumps over the lazy dog."
re.split
re.split هو وظيفة في مكتبة re في بايثون تستخدم لتقسيم سلسلة نصوص إلى قائمة من الأجزاء المختلفة باستخدام تعبيرات العمليات النمطية. يمكن استخدامه لاستخراج الكلمات من جملة أو لتحويل سلاسل نصوص معقدة إلى شكل أكثر هيكلية.
على سبيل المثال، إذا كان لديك سلسلة نصوص "Hello, World!" وتريد تقسيمها إلى قائمة تحتوي على كلمتين فقط "Hello" و "World"، يمكن استخدام هذه re.split بالشكل التالي:
import re
string = "Hello, World!"
result = re.split(",\s", string)
print(result)
النتيجة ستكون:
["Hello", "World!"]
حيث استخدمنا
كفاصل بين الكلمات و \s كرمز لتمثيل أي مسافة فارغة بين الكلمات.
ال Special Characters في بايثون
تحتوي لغة بايثون على العديد من الرموز الخاصة أو الـ special characters التي تستخدم في البرمجة. وهذه بعض الأمثلة على الرموز الخاصة الشائعة في بايثون:
- # : يستخدم للتعليقات، حيث يتم تجاهل أي شيء يأتي بعده على نفس السطر.
- () : تستخدم لتحميل قيم أو تعبيرات، وفي الدالات يتم استخدامها لوضع المعاملات.
- : تستخدم لتحميل القوائم (List) والقواميس (Dictionaries).
- {} : تستخدم لتحميل القواميس (Dictionaries) والمجموعات (Sets) في بايثون.
- : يستخدم للتعبير عن التعليقات وقيم بعد if و else و def و for و while و class و try.
- , يستخدم كفاصلة بين العناصر في القوائم والقواميس والمجموعات.
- . يستخدم للإشارة إلى خاصية معينة أو دالة معينة في الكائن.
- + و - و و / و % و // تستخدم للعمليات الحسابية الأساسية، حيث يتم استخدام + للجمع، - للطرح، للضرب، / للقسمة، % للباقي، و // للقسمة المُستقرة.
- = يستخدم لتعيين قيمة لمتغير.
- == و != و > و < و >= و <= تستخدم لعمليات المقارنة، حيث يتم استخدام == للتحقق من المساواة، و != للتحقق من عدم المساواة، و > و < و >= و <= للتحقق من الأكبر والأصغر والأكبر أو يساوي والأصغر أو يساوي.
وضع set في الاحتمالات
تستخدم الرمز في بايثون لإنشاء قائمة (List)، وهو عبارة عن مجموعة من القيم المفصولة بفواصل وتحيط بهذه القيم بأقواس مربعة.
يمكن تمرير مجموعة من الأحرف والرموز الأخرى داخل الأقواس المربعة لإنشاء قائمة بالشكل التالي:
my_list = ['a', 'b', 'c', '#', '$', '%']
يمكن استخدام عمليات أخرى على القوائم مثل الوصول إلى عنصر محدد في القائمة باستخدام الفهرس، كما يمكن إجراء عمليات مثل الإضافة والحذف والتعديل على القائمة.
ال Special Sequences في بايثون
تحتوي لغة البرمجة Python على ما يسمى باسم "Special Sequences" وهي سلاسل من الرموز المخصصة تستخدم في تعبيرات السلاسل (Strings) للإشارة إلى أنماط محددة داخل النص، ويمكن استخدام هذه الأنماط في تحليل وتعديل السلاسل بسهولة.
وفيما يلي بعض ال Special Sequences الأكثر شيوعًا في Python:
- - \n: لتمثيل نهاية السطر (Newline).
- - \t: لتمثيل علامة التبويب (Tab).
- - \b: لتمثيل المسافة إلى الخلف (Backspace).
- - \r: لتمثيل رجوع السطر (Carriage Return).
- - \\: لتمثيل علامة القسمة (\).
- - \': لتمثيل علامة الاقتباس الفردي (').
- - \": لتمثيل علامة الاقتباس المزدوج (")
يمكن استخدام Special Sequences هذه في تعريف سلاسل جديدة كما يلي:
>>> print("Hello\nworld!")
Hello
world!
>>> print("This\tis\ta\ttab")
This is a tab
>>> print("Backspace\b\b\b\bspace")
Backsp space
>>> print("Carriage\rReturn")
Returnige
>>> print("This is a backslash: \\")
This is a backslash: \
>>> print('The single quote \'')
The single quote '
>>> print("The double quote \"")
The double quote "
الكائن Match
كائن Match في بايثون هو كائن يتم إنشاؤه بعد استخدام دالة match() الموجودة في مكتبة re في بايثون.
يتم استخدام الكائن Match لتخزين نتائج عملية البحث عن التطابق في نص معين. ويحتوي هذا الكائن على معلومات حول موضع وطول التطابق، وكذلك عن قيم التطابق الفرعية إذا تم استخدام فئات التعبيرات العادية المتباينة في البحث.
تستخدم الدالة group() الموجودة في الكائن Match لاستخراج النص الذي تم التطابق عليه، وتستخدم الدالة start() و end() للحصول على معلومات حول موضع التطابق في النص الأساسي.
وهذا مثال بسيط لاستخدام الكائن Match في بايثون:
import re
pattern = r"hello"
text = "hello world"
match_object = re.search(pattern, text)
if match_object:
print("تم العثور على التطابق!")
print("النص: ", match_object.group())
print("موضع البداية: ", match_object.start())
print("موضع النهاية: ", match_object.end())
else:
print("لم يتم العثور على التطابق")
في هذا المثال، تم استخدام الدالة search() من مكتبة re للبحث عن التطابق بين نمط البحث pattern والنص text . ثم تم حفظ نتيجة البحث في كائن Match match_object ، واستخدمنا الدوال group() و start() و end() للحصول على معلومات حول التطابق.