الفرق بين المراجعتين لصفحة: «Python/re»

من موسوعة حسوب
أنشأ الصفحة ب'تقّدم الوحدة <code>re</code> مجموعة من العمليات الخاصة بمطابقة التعابير النمطية Regular Expressions وهي مشا...'
 
لا ملخص تعديل
سطر 1: سطر 1:
تقّدم الوحدة <code>re</code> مجموعة من العمليات الخاصة بمطابقة التعابير النمطية Regular Expressions وهي مشابهة إلى حدّ كبير لتلك العمليات الموجودة في لغة Perl.
 
تقّدم الوحدة <code>re</code> مجموعة من العمليات الخاصة بمطابقة التعابير النمطية Regular Expressions وهي مشابهة إلى حدّ كبير للعمليات الموجودة في لغة Perl.


يمكن أن تكون الأنماط والسلاسل النصية المراد العثور عليها سلاسل نصية بترميز Unicode من نوع ([[Python/str|<code>str</code>]]) أو سلاسل نصية ذات 8 بتات من نوع ([[Python/bytes|<code>bytes</code>]])، ولكن لا يجوز المزج بين النوعين، بمعنى أنّه لا يمكن مطابقة سلسلة نصية مع نمط من نوع البايتات والعكس صحيح أيضًا، وبنفس الطريقة، عند الرغبة في إجراء عملية استبدال يجب أن تكون سلسلة الاستبدال النصية من نوع واحد يطابق نوع كلّ من النمط وسلسلة البحث النصية.
يمكن أن تكون الأنماط والسلاسل النصية المراد العثور عليها سلاسل نصية بترميز Unicode من نوع ([[Python/str|<code>str</code>]]) أو سلاسل نصية ذات 8 بتات من نوع ([[Python/bytes|<code>bytes</code>]])، ولكن لا يجوز المزج بين النوعين، بمعنى أنّه لا يمكن مطابقة سلسلة نصية مع نمط من نوع البايتات والعكس صحيح أيضًا، وبنفس الطريقة، عند الرغبة في إجراء عملية استبدال يجب أن تكون سلسلة الاستبدال النصية من نوع واحد يطابق نوع كلّ من النمط وسلسلة البحث النصية.
سطر 7: سطر 8:
ولحل مشكلة التضارب هذه يمكن استخدام السلاسل النصية الخام في بايثون، وهي السلاسل النصية التي تكون مسبوقة بالحرف <code>r</code>. لا تُعامل الخطوط المائلة العكسية في السلاسل النصية الخام معاملة خاصة، لذا فإنّ التعبير <code>r"\n"‎</code> هو سلسلة نصية تتضمن حرفين هما <code>'\'</code> و <code>'n'</code>، أما التعبير ‎<code>"\n"</code>‎ فهو سلسلة نصية تتضمن حرفًا واحدًا هو حرف السطر الجديد، ومن هنا اعتاد المطوّرون على استخدام السلاسل النصية الخام لكتابة الأنماط المستخدمة في التعابير النمطية.
ولحل مشكلة التضارب هذه يمكن استخدام السلاسل النصية الخام في بايثون، وهي السلاسل النصية التي تكون مسبوقة بالحرف <code>r</code>. لا تُعامل الخطوط المائلة العكسية في السلاسل النصية الخام معاملة خاصة، لذا فإنّ التعبير <code>r"\n"‎</code> هو سلسلة نصية تتضمن حرفين هما <code>'\'</code> و <code>'n'</code>، أما التعبير ‎<code>"\n"</code>‎ فهو سلسلة نصية تتضمن حرفًا واحدًا هو حرف السطر الجديد، ومن هنا اعتاد المطوّرون على استخدام السلاسل النصية الخام لكتابة الأنماط المستخدمة في التعابير النمطية.


من الضروري الانتباه إلى أنّ معظم العمليات الخاصة بالتعابير النمطية متوفّرة كدوالّ وتوابع على مستوى الوحدة ويمكن تطبيقها على التعابير النمطية المصرّفة. والدوالّ هي اختصارات لا تتطلب من المستخدم إجراء عملية التصريف على كائن <code>regex</code> في البداية، ولكنّها تفتقد بعض المعاملات التي تضبط أداء هذه الدوال.
من الضروري الانتباه إلى أنّ معظم العمليات الخاصة بالتعابير النمطية متوفّرة كدوالّ على مستوى الوحدة module-level functions ويمكن تطبيقها على التعابير النمطية المصرّفة. والدوالّ هي اختصارات لا تتطلب إجراء عملية التصريف على [[Python/regex|كائن <code>regex</code>]] في البداية، ولكنّها تفتقد بعض المعاملات التي تضبط أداء هذه الدوال.
 
==دوال الوحدة re==
== دوال الوحدة re ==
تقدّم الوحدة re مجموعة الدوال التالية إضافة إلى استثناء واحد فقط:
تقدّم الوحدة re مجموعة الدوال التالية إضافة إلى استثناء واحد فقط:
 
===الدالة <code rel="mw:WikiLink" href="Python/re/compile" title="Python/re/compile">[[Python/re/compile|re.compile()]]‎</code>===
=== الدالة [[Python/re/compile|re.compile()]]‎ ===
تصرّف الدالة التعبير النمطي إلى [[Python/regex|كائن تعبير نمطي <code>regex</code>]] يمكن استخدامه للمطابقة بواسطة توابعه الخاصّة <code>[[Python/regex/match|match()‎]]</code> و <code>[[Python/regex/search|search()]]‎</code> وغيرها.
تصرّف الدالة التعبير النمطي إلى كائن تعبير نمطي <code>regex</code> يمكن استخدامه للمطابقة بواسطة توابعه الخاصّة <code>[[Python/regex/match|match()‎]]</code> و <code>[[Python/regex/search|search()]]‎</code> وغيرها.
===الدالة [[Python/re/search|<code>re.search()</code>]]‎===
 
تفحص الدالة السلسلة النصية بحثًا عن أول موقع يحصل فيه تطابق مع التعبير النمطي المعطى، وتعيد [[Python/match|كائن <code>match</code>]] المقابل.
=== الدالة [[Python/re/search|re.search()]]‎ ===
===الدالة [[Python/re/match|<code>re.match()</code>]]‎===
تفحص الدالة السلسلة النصية بحثًا عن أول موقع يحصل فيه تطابق مع التعبير النمطي المعطى، وتعيد كائن <code>match</code> المقابل.
تفحص الدالة بداية السلسلة النصية بحثًا عن حالة تطابق مع التعبير النمطي المعطى، وتعيد [[Python/match|كائن <code>match</code>]] المقابل.
 
=====الدالة [[Python/re/fullmatch|<code>re.fullmatch()</code>]]‎=====
=== الدالة [[Python/re/match|re.match()]]‎ ===
تفحص الدالة بداية السلسلة النصية بحثًا عن حالة تطابق مع التعبير النمطي المعطى، وتعيد كائن <code>match</code> المقابل.
 
===== الدالة [[Python/re/fullmatch|re.fullmatch()]]‎ =====
تتحقّق الدالة ممّا إذا كانت السلسلة النصية بأكملها مطابقة للتعبير النمطي المعطى.
تتحقّق الدالة ممّا إذا كانت السلسلة النصية بأكملها مطابقة للتعبير النمطي المعطى.
 
=====الدالة [[Python/re/split|<code>re.split()</code>]]‎=====
===== الدالة [[Python/re/split|re.split()]]‎ =====
تقسم الدالة السلسلة النصية عند كل مكان تحدث فيه عملية مطابقة للنمط المعطى.
تقسم الدالة السلسلة النصية عند كل مكان تحدث فيه عملية مطابقة للنمط المعطى.
 
=====الدالة [[Python/re/findall|<code>re.findall()</code>]]‎=====
===== الدالة [[Python/re/findall|re.findall()]]‎ =====
تعيد الدالة جميع حالات التطابق غير المتداخلة للنمط المطبق على السلسلة النصية المعطاة على هيئة قائمة من السلاسل النصية.
تعيد الدالة جميع حالات التطابق غير المتداخلة للنمط المطبق على السلسلة النصية المعطاة على هيئة قائمة من السلاسل النصية.
 
=====الدالة [[Python/re/finditer|<code>re.findeiter()</code>‎]]=====
===== الدالة [[Python/re/finditer|re.findeiter()‎]] =====
تعيد الدالة كائنًا قابلًا للتكرار iterator ينتج عنه [[Python/match|كائنات <code>match</code>]] لجميع حالات التطابق غير المتداخلة والناتجة من تطبيق التعبير النمطي المعطى على السلسلة النصية المعطاة.
تعيد الدالة كائنًا قابلًا للتكرار iterator ينتج عنه كائنات <code>match</code> لجميع حالات التطابق غير المتداخلة والناتجة من تطبيق التعبير النمطي المعطى على السلسلة النصية المعطاة.
=====الدالة [[Python/re/sub|<code>re.sub()</code>]]‎=====
 
===== الدالة [[Python/re/sub|re.sub()]]‎ =====
تبدل الدالة حالات التطابق غير المتداخلة في أقصى اليسار -والناتجة عن تطبيق التعبير النمطي المعطى على السلسلة النصية المعطاة- بسلسلة نصية أو بالقيمة المعادة من دالة.
تبدل الدالة حالات التطابق غير المتداخلة في أقصى اليسار -والناتجة عن تطبيق التعبير النمطي المعطى على السلسلة النصية المعطاة- بسلسلة نصية أو بالقيمة المعادة من دالة.
 
=====الدالة [[Python/re/subn|<code>re.subn()</code>]]‎=====
===== الدالة [[Python/re/subn|re.subn()]]‎ =====
تؤدي هذه الدالة نفس عمل الدالة <code>[[Python/re/sub|re.sub()‎]]</code> ولكنّها تعيد الناتج على هيئة <nowiki/>[[Python/tuples|صفّ]] (السلسلة الجديدة، عدد الاستبدالات المجراة).
تؤدي هذه الدالة نفس عمل الدالة <code>[[Python/re/sub|re.sub()‎]]</code> ولكنّها تعيد الناتج على هيئة <nowiki/>[[Python/tuples|صفّ]] (السلسلة الجديدة، عدد الاستبدالات المجراة).
 
=====الدالة [[Python/re/escape|<code>re.escape()</code>]]‎=====
===== الدالة [[Python/re/escape|re.escape()]]‎ =====
تهرّب الدالة جميع المحارف الخاصّة في التعبير النمطي المعطى باستثناء حروف الترميز ASCII، والأعداد والشرطة السفلية.
تهرّب الدالة جميع المحارف الخاصّة في التعبير النمطي المعطى باستثناء حروف الترميز ASCII، والأعداد والشرطة السفلية.
=====الاستثناء [[Python/re/error|<code>re.error()</code>‎]]=====
تطلق اللغة هذا الاستثناء عند تمرير سلسلة نصية غير صالحة كتعبير نمطي إلى إحدى الدوال السابقة (كأن تتضمن السلسلة أقواسًا غير متطابقة)، أو عند حدوث أخطاء أخرى أثناء عملية التصريف أو المطابقة. لا يعد خلوّ السلسلة النصية من التطابقات خطأً على الإطلاق.


===== الاستثناء [[Python/re/error|re.error()‎]] =====
== مصادر ==
تطلق اللغة هذا الاستثناء عند تمرير سلسلة نصية غير صالحة كتعبير نمطي إلى إحدى الدوال السابقة (كأن تتضمن السلسلة أقواسًا غير متطابقة)، أو عند حدوث أخطاء أخرى أثناء عملية التصريف أو المطابقة. لا يعد خلوّ السلسلة النصية من التطابقات خطأً على الإطلاق.
* [https://docs.python.org/3/library/re.html#module-re صفحة Regular expression operations في توثيق بايثون الرسمي.]

مراجعة 12:57، 5 يونيو 2018

تقّدم الوحدة re مجموعة من العمليات الخاصة بمطابقة التعابير النمطية Regular Expressions وهي مشابهة إلى حدّ كبير للعمليات الموجودة في لغة Perl.

يمكن أن تكون الأنماط والسلاسل النصية المراد العثور عليها سلاسل نصية بترميز Unicode من نوع (str) أو سلاسل نصية ذات 8 بتات من نوع (bytes)، ولكن لا يجوز المزج بين النوعين، بمعنى أنّه لا يمكن مطابقة سلسلة نصية مع نمط من نوع البايتات والعكس صحيح أيضًا، وبنفس الطريقة، عند الرغبة في إجراء عملية استبدال يجب أن تكون سلسلة الاستبدال النصية من نوع واحد يطابق نوع كلّ من النمط وسلسلة البحث النصية.

تستخدم التعابير النمطية المحرف ('\') للإشارة إلى أشكال خاصة من الأنماط أو للسماح باستخدام الحروف الخاصة كما هي ودون تنفيذ وظيفته الخاصة، وتستخدم بايثون المحرف ذاته لأداء الوظيفة عينها في السلاسل النصية، الأمر الذي يؤدي إلى حدوث بعض الأخطاء، فعلى سبيل المثال لمطابقة الخط المائل العكسي يجب استخدام النمط '\\\\'، وذلك لأنّ التعبير النمطي يجب أن يكون '\\'، وفي الوقت ذاته يجب تمثيل كل خط مائل عكسي في السلاسل النصية الاعتيادية باستخدام '\\'.

ولحل مشكلة التضارب هذه يمكن استخدام السلاسل النصية الخام في بايثون، وهي السلاسل النصية التي تكون مسبوقة بالحرف r. لا تُعامل الخطوط المائلة العكسية في السلاسل النصية الخام معاملة خاصة، لذا فإنّ التعبير r"\n"‎ هو سلسلة نصية تتضمن حرفين هما '\' و 'n'، أما التعبير ‎"\n"‎ فهو سلسلة نصية تتضمن حرفًا واحدًا هو حرف السطر الجديد، ومن هنا اعتاد المطوّرون على استخدام السلاسل النصية الخام لكتابة الأنماط المستخدمة في التعابير النمطية.

من الضروري الانتباه إلى أنّ معظم العمليات الخاصة بالتعابير النمطية متوفّرة كدوالّ على مستوى الوحدة module-level functions ويمكن تطبيقها على التعابير النمطية المصرّفة. والدوالّ هي اختصارات لا تتطلب إجراء عملية التصريف على كائن regex في البداية، ولكنّها تفتقد بعض المعاملات التي تضبط أداء هذه الدوال.

دوال الوحدة re

تقدّم الوحدة re مجموعة الدوال التالية إضافة إلى استثناء واحد فقط:

الدالة re.compile()

تصرّف الدالة التعبير النمطي إلى كائن تعبير نمطي regex يمكن استخدامه للمطابقة بواسطة توابعه الخاصّة match()‎ و search() وغيرها.

الدالة re.search()

تفحص الدالة السلسلة النصية بحثًا عن أول موقع يحصل فيه تطابق مع التعبير النمطي المعطى، وتعيد كائن match المقابل.

الدالة re.match()

تفحص الدالة بداية السلسلة النصية بحثًا عن حالة تطابق مع التعبير النمطي المعطى، وتعيد كائن match المقابل.

الدالة re.fullmatch()

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

الدالة re.split()

تقسم الدالة السلسلة النصية عند كل مكان تحدث فيه عملية مطابقة للنمط المعطى.

الدالة re.findall()

تعيد الدالة جميع حالات التطابق غير المتداخلة للنمط المطبق على السلسلة النصية المعطاة على هيئة قائمة من السلاسل النصية.

الدالة re.findeiter()

تعيد الدالة كائنًا قابلًا للتكرار iterator ينتج عنه كائنات match لجميع حالات التطابق غير المتداخلة والناتجة من تطبيق التعبير النمطي المعطى على السلسلة النصية المعطاة.

الدالة re.sub()

تبدل الدالة حالات التطابق غير المتداخلة في أقصى اليسار -والناتجة عن تطبيق التعبير النمطي المعطى على السلسلة النصية المعطاة- بسلسلة نصية أو بالقيمة المعادة من دالة.

الدالة re.subn()

تؤدي هذه الدالة نفس عمل الدالة re.sub()‎ ولكنّها تعيد الناتج على هيئة صفّ (السلسلة الجديدة، عدد الاستبدالات المجراة).

الدالة re.escape()

تهرّب الدالة جميع المحارف الخاصّة في التعبير النمطي المعطى باستثناء حروف الترميز ASCII، والأعداد والشرطة السفلية.

الاستثناء re.error()

تطلق اللغة هذا الاستثناء عند تمرير سلسلة نصية غير صالحة كتعبير نمطي إلى إحدى الدوال السابقة (كأن تتضمن السلسلة أقواسًا غير متطابقة)، أو عند حدوث أخطاء أخرى أثناء عملية التصريف أو المطابقة. لا يعد خلوّ السلسلة النصية من التطابقات خطأً على الإطلاق.

مصادر