سلاسل القوالب في بايثون

من موسوعة حسوب
< Python‏ | string

تقدّم القوالب طريقة أبسط لإجراء عمليات الاستبدال في السلاسل النصية الموصوفة في PEP 292. حيث يمكن إجراء عمليات الاستبدال باستخدام الرمز $ بدلًا من الرمز %، وباتباع القواعد التالية:

  • يعتبر التسلسل $$ تسلسل تهريب، ويجري استبداله بعلامة $ واحدة.
  • تسمّي الصيغة ‎$identifier معرّفًا يحدّد موضعًا للاستبدال يطابق مفتاح ربط يحمل الاسم "identifier". المعرّفات الصالحة هي تلك التي تتضمّن حروفًا وأرقامًا بترميز ASCII وتكون غير حساسة لحالة الأحرف، وتبدأ بشرطة سفلية أو أحد حروف الترميز ASCII. وينتهي اسم المحرّف عند أوّل حرف لا تنطبق عليه هذه القيود.
  • الصيغة ‎${identifier}‎ مكافئة للصيغة ‎$identifier، وتُستخدم في الحالات التي يتضمّن فيها المعرّف حروفًا صالحة ولكنّها ليست جزءًا من اسم المعرّف مثل: ‎"${noun}ification"‎.

يؤدي ظهور الرمز $ في أي مكان آخر ضمن السلسلة النصية إلى إطلاق الخطأ ValueError.

تقدّم وحدة string الصنف Template الذي يستخدم القواعد الآنفة الذكر في عمله، ويدعم هذا الصنف خاصية واحدة وتابعين.

خاصية الصنف Template

template

تمثّل الكائن الممرّر كمعامل للتابع الباني للصنف Template، وعادة لا يجدر تغيير قيمة هذه الخاصية، ولكن ذلك ليس أمرًا إلزاميًا.

تابعا الصنف Template

يقدّم الصنف Template التابعين التاليين:

Template.substitute()

يؤدي هذا التابع عملية الاستبدال بالاعتماد على القالب ويعيد سلسلة نصية جديدة.

Template.safe_substitute()

هذا التابع مشابه للتابع السابق، باستثناء أنّه لا يطلق خطأً أو استثناءً عند حدوث مشكلة أثناء عملية الاستبدال.

إعادة تعريف صيغة المعرّفات

يمكن اشتقاق أصناف فرعية من الصنف Template لتخصيص صيغة المعرّفات والفواصل أو التعبير النمطي المستخدم لتفسير سلسلة القالب. وللقيام بذلك يمكن إعادة تعريف override خصائص الصنف التالية:

ملاحظة: راجع (الوحدة re في بايثون) للاطلاع بصورة أوسع على التعابير النمطية وطريقة الاستفادة منها في بايثون.

delimiter - هذه هي السلسلة النصية التي تصف معرّفًا يتضمّن فاصلًا، والقيمة الافتراضية هي $. لاحظ أنّه يجب أن لا يكون الفاصل تعبيرًا نمطيًا، لأنّ الدالة re.escape()‎ ستُستدعى على هذه السلسلة النصية عند الحاجة.

idpattern - هذه الخاصية هي تعبير نمطي يصف النمط الخاص بالمعرّفات غير المحاطة بالأقواس المعقوفة (تضاف الأقواس المعقوفة تلقائيًا وحسب الحاجة). القيمة الافتراضية لهذه الخاصية هي التعبير النمطي: ‎(?-i:[_a-zA-Z][_a-zA-Z0-9]*)‎‎.

ملاحظة: نظرًا لكون الراية الافتراضية هي re.IGNORECASE فيمكن للنمط [a-z] أن يطابق بعض الحروف خارج نطاق الترميز ASCII. لذا أضيفت الراية ‎-i لاستخدام الإعدادات المحلية.

صحيح أنّ الإبقاء على الراية re.IGNORECASE هو لغرض التوافق مع الإصدارات السابقة، ولكن يمكن إعادة تعريف الراية إلى 0 أو re.IGNORECASE | re.ASCII عند إنشاء الأصناف الفرعية.

flags - الرايات التي ستُطبّق على التعبير النمطي عند إجراء عملية التصريف للتعرف على الاستبدالات، وتأخذ القيمة الافتراضية re.IGNORECASE. لاحظ أنّ الراية re.VERBOSE ستضاف إلى الرايات؛ لهذا يجب على الخاصية idpatterns أن تتبع الاصطلاحات الخاصة بالتعابير النمطية المفصّلة verbose.

ملاحظة: جديد في الإصدار 3.2.

بدلًا عمّا سبق، يمكن تقديم تعبير نمطي كامل وذلك بإعادة تعريف الخاصية pattern. وعند القيام بذلك، يجب تقديم كائن تعبير نمطي يتضمّن أربعة مجموعات التقاط ترتبط بالقواعد المبيّنة أعلاه، إلى جانب قاعدة التعرّف على المعرّفات غير الصالحة:

  • escaped: تطابق هذه المجموعة تسلسل التهريب، مثل: $$ في التعبير النمطي الافتراضي.
  • named: تطابق هذه المجموعة اسم المعرّف غير المحاط بالأقواس المعقوفة، ويجب أن لا يكون هناك فاصل في مجموعة الالتقاط.
  • braced: تطابق هذه المجموعة اسم المعرّف المحاط بالأقواس المعقوفة، ويجب أن لا يكون هناك فاصل ولا أقواس معقوفة في مجموعة الالتقاط.
  • invalid: تطابق هذه المجموعة أنماط الفواصل الأخرى (عادة ما يكون فاصلًا مفردًا)، ويجب أن تكون في نهاية التعبير النمطي.

مصادر