الفرق بين المراجعتين لصفحة: «Python/re/syntax»
أنشأ الصفحة ب'مقدّمة تقّدم الوحدة re مجموعة من العمليات الخاصة بمطابقة التعابير النمطية Regular Expressions وهي مشا...' |
لا ملخص تعديل |
||
سطر 1: | سطر 1: | ||
تقّدم الوحدة <code>re</code> مجموعة من العمليات الخاصة بمطابقة التعابير النمطية Regular Expressions وهي مشابهة إلى حدّ كبير لتلك العمليات الموجودة في لغة Perl. | |||
تقّدم الوحدة re مجموعة من العمليات الخاصة بمطابقة التعابير النمطية Regular Expressions وهي مشابهة إلى حدّ كبير لتلك العمليات الموجودة في لغة Perl. | |||
يمكن أن تكون الأنماط والسلاسل النصية المراد العثور عليها سلاسل نصية بترميز Unicode من نوع (str) أو سلاسلة نصية ذات 8 بتات من نوع (bytes)، ولكن لا يجوز المزج بين النوعين، بمعنى أنّه لا يمكن مطابقة سلسلة نصية مع نمط من نوع البايتات والعكس صحيح أيضًا، وبنفس الطريقة، عند الرغبة في إجراء عملية استبدال يجب أن تكون سلسلة الاستبدال النصية من نوع واحد يطابق نوع كلّ من النمط وسلسلة البحث النصية. | يمكن أن تكون الأنماط والسلاسل النصية المراد العثور عليها سلاسل نصية بترميز Unicode من نوع ([[Python/str|str]]) أو سلاسلة نصية ذات 8 بتات من نوع ([[Python/bytes|bytes]])، ولكن لا يجوز المزج بين النوعين، بمعنى أنّه لا يمكن مطابقة سلسلة نصية مع نمط من نوع البايتات والعكس صحيح أيضًا، وبنفس الطريقة، عند الرغبة في إجراء عملية استبدال يجب أن تكون سلسلة الاستبدال النصية من نوع واحد يطابق نوع كلّ من النمط وسلسلة البحث النصية. | ||
تستخدم التعابير النمطية | تستخدم التعابير النمطية المحرف (<code>'\'</code>) للإشارة إلى أشكال خاصة من الأنماط أو للسماح باستخدام الحروف الخاصة كما هي ودون تنفيذ وظيفته الخاصة، وتستخدم بايثون المحرف ذاته لأداء الوظيفة عينها في السلاسل النصية، الأمر الذي يؤدي إلى حدوث بعض الأخطاء، فعلى سبيل المثال لمطابقة الخط المائل العكسي يجب استخدام النمط <code>'\\\\'</code>، وذلك لأنّ التعبير النمطي يجب أن يكون <code>'\\'</code>، وفي الوقت ذاته يجب تمثيل كل خط مائل عكسي في السلاسل النصية الاعتيادية باستخدام <code>'\\'</code>. | ||
ولحل مشكلة التضارب هذه يمكن استخدام السلاسل النصية الخام في بايثون، وهي السلاسل النصية التي تكون مسبوقة بالحرف r. لا تُعامل الخطوط المائلة العكسية في السلاسل النصية الخام معاملة خاصة، لذا فإنّ التعبير r"\n" هو سلسلة نصية تتضمن حرفين هما '\' و 'n'، أما التعبير "\n" فهو سلسلة نصية تتضمن حرفًا واحدًا هو حرف السطر الجديد. | ولحل مشكلة التضارب هذه يمكن استخدام السلاسل النصية الخام في بايثون، وهي السلاسل النصية التي تكون مسبوقة بالحرف <code>r</code>. لا تُعامل الخطوط المائلة العكسية في السلاسل النصية الخام معاملة خاصة، لذا فإنّ التعبير r"\n" هو سلسلة نصية تتضمن حرفين هما '\' و 'n'، أما التعبير "\n" فهو سلسلة نصية تتضمن حرفًا واحدًا هو حرف السطر الجديد. | ||
من هنا اعتاد المطوّرون على استخدام السلاسل النصية الخام لكتابة الأنماط المستخدمة في التعابير النمطية. | من هنا اعتاد المطوّرون على استخدام السلاسل النصية الخام لكتابة الأنماط المستخدمة في التعابير النمطية. | ||
سطر 44: | سطر 43: | ||
يؤدي استخدام هذا الحرف إلى مطابقة ما يسبقه من التعابير النمطية مهما كان عدد تكرارها (0 أو أكثر من تكرار). فعلى سبيل المثال يطابق التعبير ab* السلسلة 'a' أو 'ab' أو 'a' متبوعة بأيّ عددٍ من 'b'. | يؤدي استخدام هذا الحرف إلى مطابقة ما يسبقه من التعابير النمطية مهما كان عدد تكرارها (0 أو أكثر من تكرار). فعلى سبيل المثال يطابق التعبير ab* السلسلة 'a' أو 'ab' أو 'a' متبوعة بأيّ عددٍ من 'b'. | ||
=== | === + === | ||
يؤدي استخدام هذا الحرف إلى مطابقة ما يسبقه من التعابير النمطية بشرط تكرارها مرة واحدة على الأقل (1 أو أكثر من تكرار). فمثلًا سيطابق التعبير ab+ السلسلة 'a' إذا كانت متبوعة بأي عدد من 'b' ولكن لن يطابق السلسلة 'a' وحدها. | يؤدي استخدام هذا الحرف إلى مطابقة ما يسبقه من التعابير النمطية بشرط تكرارها مرة واحدة على الأقل (1 أو أكثر من تكرار). فمثلًا سيطابق التعبير ab+ السلسلة 'a' إذا كانت متبوعة بأي عدد من 'b' ولكن لن يطابق السلسلة 'a' وحدها. | ||
=== | === ? === | ||
يؤدي استخدام هذا الحرف إلى مطابقة ما يسبقه بشرط تكراره مرة واحدة على الأكثر (0 أو 1 تكرار) . فمثلًا سيطابق التعبير ab? إحدى السلسلتين 'a' أو 'ab'. | يؤدي استخدام هذا الحرف إلى مطابقة ما يسبقه بشرط تكراره مرة واحدة على الأكثر (0 أو 1 تكرار) . فمثلًا سيطابق التعبير ab? إحدى السلسلتين 'a' أو 'ab'. | ||
=== | === *?, +?, ?? === | ||
تتّصف الحروف '*' و '+' و '?' بكونها طمّاعة greedy، أي أنّها تطابق أكبر قدر ممكن من الحروف، ولكن قد لا يكون هذا السلوك مرغوبًا به في بعض الأحيان، فلو طُبّق التعبير النمطي <.*> على السلسلة النصية '<a> b <c>' فإنّه سيطابق السلسلة كلّها وليس الجزء '<a>' وحسب. | تتّصف الحروف '*' و '+' و '?' بكونها طمّاعة greedy، أي أنّها تطابق أكبر قدر ممكن من الحروف، ولكن قد لا يكون هذا السلوك مرغوبًا به في بعض الأحيان، فلو طُبّق التعبير النمطي <.*> على السلسلة النصية '<a> b <c>' فإنّه سيطابق السلسلة كلّها وليس الجزء '<a>' وحسب. |
مراجعة 08:22، 31 مايو 2018
تقّدم الوحدة re
مجموعة من العمليات الخاصة بمطابقة التعابير النمطية Regular Expressions وهي مشابهة إلى حدّ كبير لتلك العمليات الموجودة في لغة Perl.
يمكن أن تكون الأنماط والسلاسل النصية المراد العثور عليها سلاسل نصية بترميز Unicode من نوع (str) أو سلاسلة نصية ذات 8 بتات من نوع (bytes)، ولكن لا يجوز المزج بين النوعين، بمعنى أنّه لا يمكن مطابقة سلسلة نصية مع نمط من نوع البايتات والعكس صحيح أيضًا، وبنفس الطريقة، عند الرغبة في إجراء عملية استبدال يجب أن تكون سلسلة الاستبدال النصية من نوع واحد يطابق نوع كلّ من النمط وسلسلة البحث النصية.
تستخدم التعابير النمطية المحرف ('\'
) للإشارة إلى أشكال خاصة من الأنماط أو للسماح باستخدام الحروف الخاصة كما هي ودون تنفيذ وظيفته الخاصة، وتستخدم بايثون المحرف ذاته لأداء الوظيفة عينها في السلاسل النصية، الأمر الذي يؤدي إلى حدوث بعض الأخطاء، فعلى سبيل المثال لمطابقة الخط المائل العكسي يجب استخدام النمط '\\\\'
، وذلك لأنّ التعبير النمطي يجب أن يكون '\\'
، وفي الوقت ذاته يجب تمثيل كل خط مائل عكسي في السلاسل النصية الاعتيادية باستخدام '\\'
.
ولحل مشكلة التضارب هذه يمكن استخدام السلاسل النصية الخام في بايثون، وهي السلاسل النصية التي تكون مسبوقة بالحرف r
. لا تُعامل الخطوط المائلة العكسية في السلاسل النصية الخام معاملة خاصة، لذا فإنّ التعبير r"\n" هو سلسلة نصية تتضمن حرفين هما '\' و 'n'، أما التعبير "\n" فهو سلسلة نصية تتضمن حرفًا واحدًا هو حرف السطر الجديد.
من هنا اعتاد المطوّرون على استخدام السلاسل النصية الخام لكتابة الأنماط المستخدمة في التعابير النمطية.
من الضروري الانتباه إلى أنّ معظم العمليات الخاصة بالتعابير النمطية متوفّرة كدوالّ وتوابع على مستوى الوحدة ويمكن تطبيقها على التعابير النمطية المصرّفة. والدوالّ هي اختصارات لا تتطلب من المستخدم إجراء عملية التصريف على كائن regex في البداية، ولكنّها تفتقد بعض المعاملات التي تضبط أداء هذه الدوال.
صيغة التعابير النمطية تستخدم التعابير النمطية لمطابقة مجموعة من الحروف في السلاسل النصية، وتسمح الدوال في هذه الوحدة بالتحقق من تطابق سلسلة نصّية معينة مع التعبير النمطي المعطى (أو من تطابق التعبير النمطي المعطى مع سلسلة نصّية معينة، والنتيجة في كلتا الحالتين واحدة).
يمكن ربط التعابير النمطية بعضها ببعض لتكوين تعابير نمطية جديدة، فعلى سبيل المثال إن كان A و B تعبيرين نمطيين فإنّ AB هو تعبير نمطيّ أيضًا. وبصورة عامة، إن كانت السلسلة p تطابق التعبير النمطي A وكانت سلسلة نصية أخرى q مطابقة للتعبير النمطي B، فإنّ السلسلة pq والناتجة عن ربط السلسلتين p و q تكون مطابقة للتعبير AB، إلا إذا تضمّن أحد التعبيرين عمليات ذات أولوية دنيا، أو شروطًا تضع حدودًا بين A و B، أو إشارات لمجموعات مرقمّة.
هذا يعني أنّ يمكن وبكل سهولة إنشاء تعابير نمطية معقّدة باستخدام تعابير نمطية بسيطة كتلك الواردة في هذا القسم.
يمكن أن تتضمن التعابير النمطية حروفًا عادية وأخرى خاصّة. ومعظم الحروف العادية مثل 'A' أو 'a' أو '0' هي أبسط شكل ممكن للتعابير النظامية، فهذه الحروف تطابق نفسها فقط. ويمكن ربط الحروف العادية بعضها ببعض، وهكذا تطابق الكلمة last السلسلة النصية 'last'. ملاحظة: سنستخدم هذا التنسيق للتعابير النمطية دون إحاطتها بعلامات اقتباس، أما السلاسل النصية المراد مطابقتها فستكون 'محاطة بعلامات اقتباس مفردة').
بعض الحروف مثل '|' أو ')' تحمل معنىً خاصًّا، وهي إمّا ترمز إلى فئات الحروف الاعتيادية، أو تؤثّر على طريقة تفسير التعابير النمطية المحيطة بالحروف الاعتيادية.
لا يمكن استخدام رموز التكرار مثل (*، +، ?، {m,n}، الخ...) على نحو متشعب مباشرة، وبهذا يمكن تجنّب اللبس الذي قد يحصل مع اللاحقة ? ومع المعدِّلات الأخرى. ولتطبيق عملية تكرار على عملية تكرار أخرى، يمكن استخدام الأقواس الهلالية. فعلى سبيل المثال يطابق التعبير (?:a{6})*
أي مضاعفات لستة محارف 'a'.
الحروف الخاصة
.
تطابق النقطة في الوضع الاعتيادي أي محرف باستثناء محرف السطر الجديد. وفي حال تعيين الراية DOTALL تطابق النقطة أيّ محرف إضافة إلى محرف السطر الجديد.
^
يطابق هذا المحرف بداية السلسلة النصية، وعند تفعيل وضع الأسطر المتعددة MULTILINE فإنّ هذا المحرف يطابق مباشرة بعد كل سطر جديد.
$
يطابق هذا المحرف نهاية السلسلة النصية أو ما قبل حرف السطر الجديد مباشرة في نهاية السلسلة النصية، وفي وضع الأسطر المتعددة يطابق هذا المحرف ما يسبق حرف السطر الجديد مباشرة. يطابق النمط foo كلًّا من السلسلتين 'foo' و 'foobar'، ولكن التعبير النمطي foo$ فيطابق السلسلة 'foo' فقط. أما البحث عن foo.$ في السلسلة 'foo1\nfoo2\n' فيطابق 'foo2' كما هو متوقع، ولكنه يطابق 'foo1' في وضع الأسطر المتعددة. يؤدي البحث عن $ فقط في السلسلة 'foo\n' إلى العثور على تطابقين (فارغين)، الأول قبل السطر الجديد، والثاني في نهاية السلسلة النصية.
*
يؤدي استخدام هذا الحرف إلى مطابقة ما يسبقه من التعابير النمطية مهما كان عدد تكرارها (0 أو أكثر من تكرار). فعلى سبيل المثال يطابق التعبير ab* السلسلة 'a' أو 'ab' أو 'a' متبوعة بأيّ عددٍ من 'b'.
+
يؤدي استخدام هذا الحرف إلى مطابقة ما يسبقه من التعابير النمطية بشرط تكرارها مرة واحدة على الأقل (1 أو أكثر من تكرار). فمثلًا سيطابق التعبير ab+ السلسلة 'a' إذا كانت متبوعة بأي عدد من 'b' ولكن لن يطابق السلسلة 'a' وحدها.
?
يؤدي استخدام هذا الحرف إلى مطابقة ما يسبقه بشرط تكراره مرة واحدة على الأكثر (0 أو 1 تكرار) . فمثلًا سيطابق التعبير ab? إحدى السلسلتين 'a' أو 'ab'.
*?, +?, ??
تتّصف الحروف '*' و '+' و '?' بكونها طمّاعة greedy، أي أنّها تطابق أكبر قدر ممكن من الحروف، ولكن قد لا يكون هذا السلوك مرغوبًا به في بعض الأحيان، فلو طُبّق التعبير النمطي <.*> على السلسلة النصية '<a> b <c>' فإنّه سيطابق السلسلة كلّها وليس الجزء '<a>' وحسب. تؤدي إضافة الحرف ? بعد الحروف الخاصة إلى تحويلها إلى حروف غير طمّاعة non-greedy، أي أنّها ستطابق أقلّ قدر ممكن من الحروف. وهكذا فإنّ استخدام التعبير <.*?> سيطابق '<a>' فقط.
{m}
يحدّد هذا التعبير عدد مرات تكرار التعبير النمطي الذي يليه والذي يجب مطابقته ضمن السلسلة المعطاة. في حال كان عدد التطابقات السلسلة النصية المعطاء أقلّ من العدد المحدّد فإنّ التعبير النمطي لن يطابق السلسلة برمّتها. فعلى سبيل المثال يطابق التعبير a{6} بالضبط 6 أحرف 'a' في السلسلة، لا أقل ولا أكثر.
{m,n}
يؤدي استخدام هذا التعبير النمطي إلى مطابقة ما يسبقه من تعابير نمطية بشرط تكرارها من العدد m إلى العدد n، مع محاولة إيجاد أكبر عدد من حالات التطابق. فعلى سبيل المثال يطابق التعبير a{3,5} من 3 إلى 5 أحرف 'a' في السلسلة النصية المعطاة. يؤدي حذف الرقم الأول m إلى تحويل الحد الأدنى إلى الصفر، ويؤدي حذف الرقم الثاني n إلى رفع الحد الأعلى إلى ما لا نهاية. فمثلًا يطابق النمط a{4,}b السلسلة النصية 'aaaab' أو ألف حرف 'a' متبوعة بحرف 'b' واحد فقط، ولكنّه لن يطابق السلسلة 'aaab'. لا يمكن حذف الفاصلة ',' لأنّ ذلك سيؤدي إلى تحويل هذا القيد إلى القيد {m} الوارد ذكره في أعلاه.
{m, n}?
يؤدي استخدام هذا القيد إلى مطابقة ما يسبقه من تعابير نمطية بشرط تكرارها من m إلى n مرة، مع محاولة إيجاد أقل عدد من التكرارات. هذه الصيغة هي الصيغة غير الطماعة للقيد السابق. فعلى سبيل المثال يؤدي تطبيق النمط a{3,5} على السلسلة النصية 'aaaaaa' إلى مطابقة 5 حروف، في حين يطابق النمط a{3,5}? إلى مطابقة 3 حروف فقط.
\
يؤدي هذا القيد وظيفتين، فإمّا أن يهرّب الحروف الخاصة ليسمح بمطابقة حروف مثل '*' و '?' وما شابهها، أو يشير إلى وجود تسلسل خاص (التسلسلات الخاصة مبيّنة أدناه). يجب الانتباه إلى أنّه في حال عدم استخدام السلاسل النصية الخام في بايثون فإنّ اللغة تستخدم الخط المائل العكسي كوسيلة لتهريب الحروف في السلاسل النصية، فإن لم يتعرّف مفسّر بايثون على الحروف المهرّبة فإنّ السلسلة النصية الناتجة ستتضمّن الخط المائل العكسي وما يليه من الحروف. أما إن تمكّن المفسّر من التعرف على الحروف المهرّبة، فيجب حينئذٍ استخدام خطّين مائلين عكسيين. ونظرًا لأنّ هذه العملية معقدة وصعبة الفهم، يُنصح بشدّة استخدام السلاسل النصية الخام في جميع التعابير النمطية.
[]
تستخدم الأقواس المربعة للإشارة إلى مجموعة من الحروف.
في المجموعة:
- يمكن إدراج الحروف مفردة، مثل [amk] التي تطابق 'a' أو 'm' أو 'k'.
- يمكن تحديد مديات من الحروف وذلك بتحديد حرفين وفصلهما بالحرف '-'، فعلى سبيل المثال يطابق التعبير [a-z] أي حرف صغير بترميز ASCII، ويطابق التعبير [0-5][0-9] جميع الأعداد ذات المرتبتين من العدد 00 إلى 59، ويطابق التعبير [0-9A-Fa-f] جميع الأعداد الست عشرية. إن جرى تهريب الحرف - (مثل: [a\-z]) أو إن كان هو الحرف الأول أو الأخير (مثل [-a] أو [a-]) فإنّ التعبير سيطابق الحرف '-' في السلسلة المعطاة.
- تفقد الحروف الخاصّة معناها الخاصّ داخل المجموعات، فعلى سبيل المثال يطابق التعبير [(+*)] أي حرف من الحروف '('، '+'، '*'، أو ')'.
- يمكن أيضًا استخدام فئات الحروف مثل \w أو \S (انظر أدناه) داخل المجموعات، ولكن الحروف التي ستطابقها هذه الفئات تعتمد على الوضع المستخدم، إمّا ASCII أو LOCALE.
- يمكن مطابقة الحروف غير المنتمية إلى مدى معين عن طريق إكمال complementing المجموعة. إن كان الحرف الأول في المجموعة هو '^' فإنّ جميع الحروف غير الموجودة في المجموعة ستكون مطابقة. فمثلًا يطابق التعبير [^5] أي حرف باستثناء '5'، ويطابق التعبير [^^] جميع الحروف باسثتناء الحرف '^'. لا يمتلك القيد ^ أي معنى خاص إن لم يكن الحرف الأول في المجموعة.
- لمطابقة الحرف '[' داخل المجموعة يجب إضافة خط مائل عكسي قبله، أو وضع هذا الحرف في بداية المجموعة. فعلى سبيل المثال يطابق كلا التعبيرين [()[\]{}] و [{}]()[] حرف القوس.
|
إن كان A و B تعبيرين نمطيين مختلفين، فإنّ A|B سيُنشئ تعبيرًا نمطيًا يطابق إمّا A أو B. ويمكن استخدام أكثر من تعبيرين بواسطة هذا القيد والذي يمكن استخدامه كذلك داخل المجموعات (انظر أدناه). تُطبّق التعابير النمطية المفصولة بالقيد '|' من اليسار إلى اليمين، وعندما يطابق أحد التعابير النظامية بصورة تامة مع السلسلة النصية المعطاة، تتوقّف عملية البحث عند ذلك التعبير النمطي، بمعنى أنّه لو طابق التعبير A السلسلة النصية المعطاة فلن يُستخدم التعبير B وما بعده، حتى لو كانت النتيجة الحصول على تطابق أطول، وهذا يعني أنّ القيد '|' ليس طمّاعًا على الإطلاق. لمطابقة الحرف '|' يمكن استخدام التعبير \| أو إحاطته بقيد فئات الحروف مثل: [|].
(...)
يطابق هذا القيد أيّ تعبير نمطي محاط بالأقواس الهلالية، ويحدد بداية ونهاية المجموعة. يمكن استرجاع محتويات المجموعة بعد حدوث التطابق ثم مطابقة المحتويات في وقت لاحق ضمن السلسلة النصية باستخدام التسلسل الخاص \number (انظر أدناه). لمطابقة الحرف '(' أو ')' يمكن استخدام التعبير \) أو \( أو إحاطتهما بقيد فئات الحروف: [(] و [)].
(?...)
تستخدم هذه الصيغة للتعبير عن الإضافات extensions (ولكن لا يحمل الحرف '?' والمتبوع بالحرف ')' أي معنى خاص). يحدّد الحرف الأول بعد الحرف '?' بنية الإضافة والمعنى الذي تحمله. ولا تنشئ الإضافات في العادة مجموعة جديدة باستثناء الإضافة (?P<name>...). وفيما يلي قائمة بالإضافات المتوفّرة:
(?aiLmsux)
(حرف واحد أو أكثر من المجموعة 'a' ،'i' ،'L' ،'m' ،'s' ،'u' ،'x'). تطابق المجموعة السلسلة النصية الفارغة، أما الأحرف فتعيّن الراية المستخدمة في التعبير النمطي برمّته، وهي على النحو التالي: re.A (مطابقة الحروف بترميز ASCII فقط)، re.I (تجاهل حالة الأحرف)، re.L (الاعتماد على الإعدادات المحلية)، re.M (متعددة الأسطر)، re.S (جعل النقطة تطابق كل شيء)، re.U (مطابقة الحروف بترميز Unicode)، و re.X (تعابير نمطية منسقة). (للتعرف على الرايات راجع قسم XXXXXXXX). هذه الطريقة مفيدة إن كنت ترغب في تضمين الرايات في التعابير النمطية لتكون جزءًا منها، بدلًا من تمرير الراية كمعامل إلى الدالة re.compile(). من الجدير بالذكر أنّه يجب استخدام الرايات أوّلًا في سلسلة التعبير النمطي.
(?:...)
هذا القيد مشابه للأقواس الاعتيادية حيث يطابق أي تعبير نمطي داخل الأقواس، ولكنّ لا يمكن استعادة السلسلة الفرعية المطابقة بواسطة المجموعة بعد إجراء عملية المطابقة ولا يمكن الإشارة إليها في التعابير النمطية.
(?imsx-imsx:...)
(صفر أو أكثر من الحروف في المجموعة 'i'، 'm'، 's'، 'x'، ويمكن أن يتبعها الحرف '-' وهو أمر اختياري، ويتبعه حرف واحد أو أكثر من نفس المجموعة). تستخدم الحروف لتعيين أو إلغاء الرايات لجزء من التعبير النمطي، وهي على النحو التالي: re.i (تجاهل حالة الأحرف)، re.M (متعدد الأسطر)، re.S (النقطة تطابق كلّ شيء)، re.X (تعابير نمطية منسقة). ملاحظة: هذا القيد جديد في الإصدار 3.6 من اللغة.
(?P<name>...)
هذا القيد مشابه للأقواس الاعتيادية، ولكن يمكن الوصول إلى السلسلة الفرعية المطابقة عن طريق اسم المجموعة الرمزي name. يجب أن تكون أسماء المجموعات معرّفات بايثون صالحة، ويجب تعريف كل اسم مجموعة مرة واحدة فقط ضمن التعبير النمطي. المجموعة الرمزي هي مجموعة مرقّمة أيضًا، كما لو كانت المجموعة لا تحمل أي اسم على الإطلاق. يمكن الإشارة إلى المجموعات المسمّاة في ثلاثة سياقات. إن كان النمط هو ?P<quote>['"]).*?(?P=quote) (أي يطابق سلسلة نصية محاطة بعلامات اقتباس أحادية أو ثنائية):
سياق الإشارة إلى المجموعة "quote" طرق الإشارة إليها ضمن النمط نفسه (?P=quote) (كما هو موضّح) \1 عند معالجة كائن التطابق m m.group('quote') m.end('quote') (الخ..) في سلسلة نصية تُمرّر إلى المعامل repl في الدالة re.sub() \g<quote> \g<1> \1
(?P=name)
إشارة راجعة إلى المجموعة المسماة، وتطابق أي نص جرت مطابقته بواسطة المجموعة المسمّاة name في القيد السابق.
(?#...)
تستخدم هذه الصيغة لإضافة التعليقات، ويجري تجاهل المحتوى المحاط بالأقواس الهلالية.
=== (?=...)
يطابق هذا القيد إذا طابق التعبير النمطي الذي يلي علامة المساواة، ويسمّى هذا القيد بقيد التحقّق المسبق lookahead assertion. فعلى سبيل المثال يطابق التعبير Isaac (?=Asimov) السلسلة النصية 'Isacc ' في حالة واحدة فقط وهي أن تكون الكلمة متبوعة بالعبارة 'Asimov'.
(?!...)
يطابق هذا القيد إذا لم يطابق التعبير النمط الذي يلي علامة المساواة، ويسمّى هذا القيد بقيد التحقّق المسبق السلبي negative lookahead assertion. فعلى سبيل المثال يطابق التعبير Isaac(?!Asimov) السلسلة 'Isaac ' في حالة واحدة فقط وهي أن لا تكون متبوعة بالعبارة 'Asmiov'.
(?<=...)
يطابق هذا القيد إذا كان الموضع الحالي في السلسلة النصية مسبوقًا بحالة تطابق للتعبير النمطي الذي يلي علامة المساواة وتنتهي في الموقع الحالي. يسمّى هذا القيد بقيد التحقّق اللاحق الإيجابي positive lookbehind assertion. على سبيل المثال سيعثر التعبير (?<=abc)def على حالة تطابق في السلسلة 'abcdef'، لأنّ عملية التحقّق اللاحقة سترجع ثلاثة أحرف إلى الوراء وتتحقّق مما إذا كان النمط المعطى موجودًا في السلسلة النصية. يجب أن يطابق النمط المعطى سلاسل نصية ذات طول ثابت، وهذا يعني إمكانية استخدام تعابير مثل abc أو a|b، أما تعابير مثل a* و a{3,4} فغير مسموح بها. يجب الانتباه إلى أنّ الأنماط التي تبدأ بقي تحقّق لاحق إيجابي لن تطابق في بداية السلسلة النصية المعطاة، وفي مثل هذه الحالات يجب استخدام الدالة search() عوضًا عن الدالة match():
>>> import re >>> m = re.search('(?<=abc)def', 'abcdef') >>> m.group(0) 'def'
في هذا المثال يجري البحث عن كلمة تتبع الواصلة hyphen: >>> m = re.search(r'(?<=-)\w+', 'spam-egg') >>> m.group(0) 'egg'
ملاحظة: أصبحت اللغة تدعم إشارات المجموعات ذات الطول الثابت منذ الإصدار 3.5 من اللغة.
(?<!...)
يطابق هذا القيد إن لم يكن الموضع الحالي في السلسلة النصية مسبوقًا بحالة تطابق للتعبير النمطي الذي يلي علامة المساواة وتنتهي في الموقع الحالي. يسمى هذا القيد بقيد التحقق اللاحق السلبي. وكما هو الحال في قيد التحقق اللاحق الإيجابي، يجب أن يكون النمط المعطى مطابقًا لسلاسل نصية ذات طول ثابت. يمكن للأنماط التي تبدأ بقيد تحقق لاحق سلبي أن تطابق في بداية السلسلة النصية المعطاة.
(?(id/name)yes-pattern|no-pattern)
يحاول هذا القيد أن يطابق النمط yes-pattern إن كانت المجموعة ذات المعرّف id او الاسم name موجودة، وأن يطابق النمط no-pattern إن كانت المجموعة غير موجودة. النمط no-pattern هو نمط اختياري ويمكن حذفه من القيد. على سبيل المثال يمثّل التعبير (<)?(\w+@\w+(?:\.\w+)+)(?(1)>|$) تعبير مطابقة ضعيف لعناوين البريد الإلكتروني، حيث يطابق '<user@host.com>' و 'user@host.com' ولكنّه لا يطابق '<user@host.com' ولا 'user@host.com>'.
التسلسلات الخاصة
يتكوّن التسلسل الخاص من الحرف '\' متبوعًا بأحد الأحرف الموجودة في القائمة أدناه. إن لم يكن الحرف الاعتيادي عددًا أو حرفًا ضمن الترميز ASCII فإنّ التعبير النمطي الناتج سيطابق الحرف الثاني. فمثلًا، يطابق التعبير \$ الحرف '$'.
\number
يطابق محتويات المجموعة التي تحمل الرقم نفسه، ويبدأ ترقيم المجموعات من 1. فعلى سبيل المثال يطابق التعبير (.+) \1 السلسلة النصية 'the the' أو '55 55' ولكن لن يطابق 'thethe' (لاحظ وجود فاصلة بيضاء بعد المجموعة). يمكن استخدام هذا التسلسل الخاص لمطابقة أول 99 مجموعة. إن كانت المرتبة الأولى من number هي 0، أو كان number عددًا مكوّنًا من ثلاثة أعداد في النظام الثماني، فلن يُفسّر كتطابق للمجموعة، بل كحرف يمتلك قيمة number في النظام الثماني. تعامل جميع عمليات تهريب الأعداد ضمن '[' و ']' في فئات الحروف معاملة الأحرف.
\A
يطابق بداية السلسلة النصية فقط.
\b
يطابق السلسلة النصية الفارغة، ولكن في بداية أو نهاية الكلمة فقط، والكلمة هي تسلسل من الحروف. يمكن تعريف التسلسل \b بأنّه الحدّ الفاصل بين حرف من التسلسل \w و \W (أو العكس)، أو بين التسلسل \w وبداية أو نهاية السلسلة النصية. هذا يعني أنّ التعبير r'\bfoo\b' يطابق كلًّا من 'foo' و 'foo.' و '(foo)' و 'bar foo baz' ولكن لا تطابق 'foobar' أو 'foo3'. تُستخدم حروف وأرقام الترميز Unicode بصورة افتراضية لإنشاء أنماط بهذا الترميز، ولكن يمكن تغيير الترميز باستخدام راية ASCII. تُعيّن حدود الكلمات باستخدام الإعدادات المحلية إن استُخدمت الراية LOCALE. ولغرض التوافق مع السلاسل النصية في بايثون، فإنّ \b تمثّل حرف المسافة الخلفية backspace ضمن مدًى من الحروف.
\B
يطابق هذا التسلسل السلسلة الفارغة ولكن عندما لا تكون في بداية الكلمة أو نهايتها. وهذا يعني أنّ النمط r'py\B' يطابق كلًّا من 'python' و 'py3' و 'py2' ولكن لا يطابق 'py' ولا 'py.' ولا 'py!'. هذا التسلسل هو معكوس التسلسل \b، لذا فإنّ الحروف في أنماط Unicode هي حروف وأرقام هذا الترميز أو الشرطة السفلية، ويمكن تغيير الترميز باستخدام الراية ASCII. تُعيّن حدود الكلمة عن طريق الإعدادات المحلية إن جرى استخدام الراية LOCALE.
\d
أنماط Unicode (السلاسل النصية): يطابق هذا التسلسل اخلاص أي عدد بترميز Unicode في النظام العشري (أي الحروف التي تندرج ضمن التصنيف [Nd] في ترميز Unicode) وتشمل الأعداد [0-9] وأعداد أخرى كثيرة ضمن هذا الترميز. إن استخدمت الراية ASCII فإنّ هذا التسلسل سيطابق الأعداد [0-9] فقط (ولكن تطبيق الراية سيؤثّر على التعبير النمطي بأكمله، وفي مثل هذه الحالة يفضّل استخدام التعبير [0-9] عوضًا عن هذا التسلسل).
أنماط 8-بت (البايتات): يطابق هذا التسلسل أي عدد في النظام العشري، وهذا يكافئ القيد [0-9].
\D
يطابق أي محرف لا يكون عددًا في النظام العشري، وهو التسلسل المعاكس للتسلسل \d. وإن استُخدمت الراية ASCII فإنّ هذا التسلسل يصبح مكافئًا للتعبير [^0-9]. (ولكن تطبيق الراية سيؤثّر على التعبير النمطي بأكمله، وفي مثل هذه الحالة يفضّل استخدام التعبير [^0-9] عوضًا عن هذا التسلسل).
\s
أنماط Unicode (السلاسل النصية): يطابق محرف المسافة البيضاء في ترميز Unicode (والتي تتضمن [ \t\n\r\f\v] وغيرها الكثير من المحارف مثل المسافات غير المقطوعة non-breaking spaces والتي تكون إلزامية حسب قواعد الكتابة في بعض اللغات). إن استُخدمت الراية ASCII فإن التعبير [ \t\n\r\f\v] هو الذي سيطابق فقط، (ولكن تطبيق الراية سيؤثّر على التعبير النمطي بأكمله، وفي مثل هذه الحالة يفضّل استخدام القيد [ \t\n\r\f\v] عوضًا عن هذا التسلسل).
أنماط 8- بت (البايتات): تطابق المحارف التي تعدّ مسافات بيضاء في ترميز ASCII، وهذا يكافئ التعبير [ \t\n\r\f\v].
\S
يطابق أي محرف لا يعدّ محرف مسافة بيضاء، وهو التسلسل المعاكس للتسلسل \s. إن استُخدمت الراية ASCII فإن هذا التسلسل يصبح مكافِئًا للتعبير [^ \t\n\r\f\v] (ولكن تطبيق الراية سيؤثّر على التعبير النمطي بأكمله، وفي مثل هذه الحالة يفضّل استخدام القيد [^ \t\n\r\f\v] عوضًا عن هذا التسلسل).
\w
أنماط Unicode (السلاسل النصية): يطابق محارف الكلمات في ترميز Unicode، وهذا يتضمّن معظم المحارف التي يمكن أن تكون جزءًا من كلمات اللغات المختلفة، إضافة إلى الأرقام والشرطة السفلية. إن استُخدمت الراية ASCII فإنّ التعبير [a-zA-Z0-9_] هو الذي سيطابق فقط (ولكن تطبيق الراية سيؤثّر على التعبير النمطي بأكمله، وفي مثل هذه الحالة يفضّل استخدام القيد [a-zA-Z0-9_] عوضًا عن هذا التسلسل).
أنماط 8-بت (البايتات): يطابق المحارف التي تعدّ أرقامًا وحروفًا في مجموعة محارف ASCII، وهذا مكافئ للتعبير [a-zA-Z0-9_]. إن استخدمت الراية LOCALE فإنّ هذا التسلسل الخاص يطابق المحارف التي تعدّ حروفًا وأرقامًا في الإعدادات المحلية الحالية إضافة إلى الشرطة السفلية.
\W
يطابق أي محرف لا يكون من محارف الكلمات، وهو التسلسل المعاكس للتسلسل \w. إن استخدمت الراية ASCII فإنّ التسلسل يصبح مكافئًا للتعبير [^a-zA-Z0-9_] (لكن تطبيق الراية سيؤثّر على التعبير النمطي بأكمله، وفي مثل هذه الحالة يفضّل استخدام القيد [^a-zA-Z0-9_] عوضًا عن هذا التسلسل). إن استُخدمت الراية LOCALE فإنّ التسلسل سيطابق المحارف التي تعدّ حروفًا وارقامًا في الإعدادات المحلية الحالية إضافة إلى الشرطة السفلية.
\Z
يطابق هذا التسلسل في نهاية السلسلة النصية فقط.
يمكن استخدام معظم علامات التهريب القياسية المستخدمة في سلاسل بايثون النصية ضمن التعبيرات النمطية:
\a \b \f \n
\r \t \u \U
\v \x \\
(لاحظ أنّ \b يستخدم لتمثيل حدود الكلمة، ويعني المسافة الخلفية backspace داخل فئات الحروف فقط). يتعرّف مفسّر التعبيرات النمطية على تسلسلي '\u' و '\U' في أنماط Unicode فقط، ولكنّها تعدّ أخطاءً في أنماط البايتات. يمكن استخدام تسلسلات التهريب الثمانية ولكن ضمن نطاق ضيق، فإن كان العدد الأول هو 0، أو كان هناك ثلاثة أعداد من النظام الثماني، فإنّ التسلسل يعدّ تسلسل تهريب ثماني، وباستثناء ما سبق فإنّه يعدّ إشارة مجموعة. وكما هو الحال مع تسلسلات التهريب في السلاسل النصية، فإنّ تسلسلات التهريب الثمانية يجب أن تتضمّن ثلاثة أعداد فقط. ملاحظة: أضيف التسلسلان '\u' و '\U' في الإصدار 3.3 من اللغة. ملاحظة: أصبحت التسلسلات المجهولة والتي تتضمن الحرف '\' إلى جانب أحد حروف ASCII تعدّ أخطاءً في الإصدار 3.6 من اللغة.