إذا اقترح المساعد تعبيرا نمطيا للرموز، فلا يكفي أن يعثر على مثال مناسب داخل النص. قد يكون المطلوب استخراج رمز من رسالة طويلة، وقد يكون قبول خانة لا تحمل سوى الرمز. التعبير نفسه لا يحدد أي السؤالين نسأل؛ طريقة المطابقة والإدخال الذي يصل إليها جزء من المهمة.
الخلاصة السريعة
حدد هل تبحث عن جزء أم تشترط مطابقة النص كله، ثم ثبت قاعدة الرمز والمعالجة السابقة؛ نجاح مطابقة الشكل لا يثبت وجود السجل الذي يشير إليه الرمز.
- تميز وثائق Python بين search للبحث عن موضع مطابق داخل السلسلة وfullmatch لمطابقة السلسلة كلها؛ [0-9] نطاق الأرقام اللاتينية و{2} تكرار مرتين. [1]
- في تمريننا المعلن، Q[0-9]{2} يطابق Q12 كاملا، لكن وجود Q12 داخل prefixQ12suffix يحقق البحث عن جزء فقط، لا مطابقة الإدخال كله.
- النص Q123 يتضمن الجزء Q12، لكنه يحمل رقما ثالثا خارج رمزنا المحدد؛ لا يجعل عدد التكرار مرتين كل السلسلة مقبولة عند البحث الجزئي.
- المسافات المحيطة تبقى ضمن الإدخال ما لم تسمح القاعدة بإزالتها مسبقا؛ أعلن ذلك التحويل، ولا تجعل مطابقة شكل الرمز دليلا على هويته أو وجوده.
ما السؤال الذي تجيب عنه طريقة المطابقة؟
تصف وثائق Python وظيفة search بأنها تبحث عن أول موضع مطابق، ووظيفة fullmatch بأنها تطابق السلسلة كاملة. وتبين أن مجموعة مثل [0-9] تستعمل نطاق الأرقام من صفر إلى تسعة، وأن {m} يطلب تكرار الجزء السابق m مرات. [1]
نستعمل هذه التعريفات في مقارنة ورقية، لا بوصفها نتيجة برنامج شغلناه. لو طلب المستخدم استخراج رمز أينما وجد، قد يكون البحث عن جزء مناسبا. ولو طلب فحص خانة كاملة، فوجود جزء مناسب داخلها لا يجيب عن الشرط الآخر. اسأل عن السؤال قبل تعديل التعبير الذي اقترحه المساعد.
ماذا نفعل بالنص الزائد حول الرمز؟
نعلن قاعدة محلية: الرمز حرف Q اللاتيني الكبير يتبعه رقمان من المجموعة 0 إلى 9 فقط. نمثله بالتعبير Q[0-9]{2} دون أعلام إضافية، ونمرر النص كما ورد. النص Q12 يوافق القاعدة على كامل الإدخال.
أما prefixQ12suffix فيحمل Q12 بين حروف أخرى. في البحث الجزئي يوجد موضع يوافق النمط؛ في المطابقة الكاملة لا توافق السلسلة القاعدة. لا نحتاج إلى تغيير معنى الرمز كي نفهم الفرق. استخراج جزء من رسالة وفحص الخانة كاملة مهمتان مختلفتان حتى عندما استعملتا التعبير نفسه.
هل يمنع تكرار مرتين كل رقم إضافي؟
نقارن بإدخال آخر هو Q123. الجزء Q12 يتبع قاعدة حرف ورقمين، ويبقى الرقم 3 بعده. لذلك يستطيع السؤال عن وجود جزء مناسب أن ينجح، مع أن الإدخال كله ليس الرمز المحدد. تكرار مرتين يصف الجزء المطابق؛ لا يحذف ما يأتي خارجه.
وقد يقترح المساعد توسيع القاعدة لتقبل ثلاثة أرقام أو تبديل الحرف. لا نعتمد هذا لمجرد أنه يجعل المثال يمر؛ إن طلبنا ما زال حرفا مع رقمين فالتوسيع يغير المهمة. كذلك أعلنّا نطاق الأرقام هنا تحديدا، فلا نفترض أن كل شكل رقمي في كل كتابة يقع فيه دون مراجعة القاعدة.
أين تبدأ مسؤولية المعالجة السابقة؟
إدخال يحمل مسافة ثم Q12 ثم مسافة لا يطابق الرمز كاملا وفق شرطنا دون تحويل. إذا سمحت المهمة بإزالة المسافات الخارجية قبل الفحص، نسجل هذا بوصفه خطوة سابقة ويختلف النص المفحوص عن الأصل. لا نحذفها بصمت ثم ننسب القبول إلى الأصل غير المعدل.
احفظ نسخة الإدخال، وأي تحويل مسموح، وطريقة المطابقة والجزء الذي وجدته إن كانت المهمة استخراجا. وحتى Q12 الذي يوافق الشكل لا يثبت أن هناك بطاقة بهذا الرمز أو أن صاحبها يملكها. المثال يراجع علاقة النمط بالنص، ولم نستدع أداة أو نفحص سجلات فعلية.
المصادر ومتابعة القراءة
أُعدّ هذا المقال بصياغة عربية أصلية بالاستناد إلى المصادر أعلاه، وهو مدخل تمهيدي إلى الموضوع. اقرأ منهجية المحتوى وحدوده.
