تقنية

re.escape في بايثون: هل تصلح لنص الاستبدال؟

بقاء الشرطة قبل النقطة
القالب. [1] [2]

ما يناسب النمط قد يغير نص الاستبدال. [1] [2]

الخلاصة السريعة

لا تستخدم re.escape لنص الاستبدال في sub. [1] [2]

  • النص المقصود bud.leaf. [1] [2]
  • escape تضيف شرطة قبل النقطة. [1] [2]
  • الاستبدال النصي هنا يعيد bud\.leaf بالشرطة. [1] [2]
  • الدالة تعيد bud.leaf كما كتبناه. [1] [2]
  • اختبرنا 3.12.14 بنمط X ونصوص فقط. [1] [2]

المثال

import re
replacement='bud.leaf'
print(re.sub('X',
    re.escape(replacement),'X'))
print(re.sub('X',
    lambda m:replacement,'X'))

[1] [2]

لماذا بقيت الشرطة؟

المصدر هنا يميز نمط المطابقة من قالب الاستبدال. تجهز escape المحارف الخاصة للنمط، لكن الشرطة قبل النقطة تبقى في قالبنا النصي. لا نريدها ضمن الناتج؛ لذلك اختلف المخرجان. [1] [2]

الاستبدال بالدالة دون الشرطة المضافة
الدالة. [1] [2]

البديل وحدوده

الدالة تأخذ المطابقة وتعيد النص الذي نختاره؛ هنا تعيد replacement نفسه. لا نمرره قالبًا نصيًا للاستبدال. لا نعمم المثال على مكتبات أخرى أو نغير محتوى ملف. [1] [2]

المراجع

  1. Python 3.12: re.escape and re.sub
  2. CPython 3.12.14: replacement parser
  3. موضوع تك: لغة بايثون — مفردات
  4. موضوع تك: تطبيقات بايثون — مفردات

للتوسع: بحث عن لغات البرمجة

أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.