الدالة re.compile()
في بايثون
تصرّف الدالة التعبير النمطي إلى كائن تعبير نمطي يمكن استخدامه للمطابقة بواسطة توابعه الخاصّة match() و search() وغيرها.
البنية العامة
re.compile(pattern, flag=0)
المعاملات
pattern
التعبير النمطي المراد تصريفه.
flags
يمكن تحديد طريقة التعامل مع التعبير النمطي باستخدام قيم الرايات، ويمكن استخدام أكثر من راية وذلك بفصلها بعامل OR الخاص بالأعداد الثنائية (العامل |).
يمكن استخدام المتغيرات التالية كقيم للمعامل flags:
re.A re.ASCII
يؤدي استخدام هذه الراية إلى جعل عملية المطابقة الخاصة بالتسلسلات \w ،\W ،\b ،\B ،\d ،\D ،\s و \S محصورة بالترميز ASCII عوضًا عن الترميز Unicode. تعمل هذه الراية مع أنماط Unicode فقط، ويتم تجاهلها في أنماط البايتات لأنّها تكون بلا معنى. هذه الراية مطابقة للراية السطرية (?a).
جدير بالذكر أنّه لغرض الإبقاء على التوافق مع الإصدارات القديمة، فإنّ الراية re.U لا زالت موجودة (إضافة إلى الراية المرادفة re.UNICODE والراية السطرية (?u)) ولكنّها أصبحت مهملة في الإصدار 3 من بايثون نظرًا لكون عمليات المطابقة في هذا الإصدار تجري ضمن ترميز Unicode بصورة افتراضية في السلاسلة النصية (ولا يسمح بإجراء المطابقة على البايتات باستخدام ترميز Unicode).
re.DEBUG تعرض هذه الراية معلومات التنقيح الخاصة بالتعبير النمطي المصرّف، ولا وجود لراية ضمنية مماثلة.
re.I re.IGNORECASE
يؤدي استخدام هذه الراية إلى تجاهل حالة الأحرف عند إجراء عملية المطابقة، وبهذا يطابق التعبير [A-Z] الأحرف الصغيرة أيضًا. ولا تقتصر عملية المطابقة على الحروف العادية، بل تتجاوزها إلى حروف Unicode برمّتها (كأن يطابق Ü الحرف ü)، إلا إذا استُخدمت الراية re.ASCII لتعطيل عمليات المطابقة خارج نطاق ترميز ASCII. لا تؤثر الإعدادات المحلية الحالية على عمل هذه الراية إلا إذا استُخدمت الراية re.LOCALE. الراية السطرية المقابلة هي (?i).
من الجدير بالذكر أنّه عند استخدام أنماط Unicode [a-z] أو [A-Z] إلى جانب الراية IGNORECASE فإنّ النمطين سيطابقان 52 حرفًا من حروف الترميز ASCII إلى جانب 4 أحرف خارج هذا الترميز وهي: 'İ' (حرف I اللاتيني الكبير مع نقطة فوقه، U+0130)، و 'ı' (حرف i اللاتيني الصغير بدون نقطة، U+0131)، و 'ſ' (حرف s الطويل اللاتيني الصغير، U+017F) و 'K' (علامة كلفن، U+212A). إن استخدمت الراية ASCII فستطابق الحروف 'a' إلى 'z' و 'A' إلى 'Z' فقط. (ولكن الراية تؤثر على التعبير النمطي بأكمله، لذا ينصح باستخدام التعبير (?-i:[a-zA-Z]) في مثل هذه الحالات).
re.L re.LOCALE
يؤدي استخدام هذه الراية إلى جعل عملية المطابقة باستخدام التسلسلات \w، \W، \b، \B وعمليات المطابقة التي تكون حساسة لحالة الأحرف، تعتمد على الإعدادات المحلية. يمكن استخدام هذه الراية مع أنماط البايتات فقط، ولكن لا ينصح باستخدام هذه الراية نظرًا لعدم إمكانية الاعتماد على آلية عمل الإعدادات المحلية، إذ أنّها تتعامل مع "دولة culture" واحدة في الوقت ذاته، ولا تعمل إلا مع إعدادات 8-بت المحلية. يتيح الإصدار 3 من بايثون إجراء عمليات المطابقة للسلاسل النصية بترميز Unicode، إلى جانب قدرته على التعامل مع إعدادات محلية ولغات عالمية مختلفة. هذه الراية مطابقة للراية السطرية (?L). ملاحظة: منذ الإصدار 3.6 من اللغة أصبح استخدام الراية re.LOCALE مقصورًا على أنماط البايتات، ولا يمكن استخدامها مع الراية re.ASCII.
re.M re.MULTILINE
عند استخدام هذه الراية يطابق المحرف '^' في بداية السلسلة النصية وفي بداية كلّ سطر فيها (ما يأتي مباشرة بعد كل محرف سطر جديد)، ويطابق المحرف '$' في نهاية السلسلة النصية وفي نهاية كلّ سطر فيها (أي ما يسبق كل محرف سطر جديد مباشرة). يطابق المحرف '^' بصورة افتراضية بداية السلسلة النصية فقط، ويطابق المحرف '$' نهاية السلسلة النصية فقط، وقبل محرف السطر الجديد (إن وجد) في نهاية السلسلة النصية. هذه الراية مطابقة للراية السطرية (?m).
re.S
re.DOTALL
باستخدام هذه الراية سيطابق المحرف الخاص '.' جميع الحروف إلى جانب محرف السطر الجديد، وبدون هذه الراية يطابق المحرف '.' جميع الحروف باستثناء محرف السطر الجديد. هذه الراية مطابقة للراية السطرية (?s).
re.X re.VERBOSE
تتيح هذه الراية كتابة تعابير نمطية ذات مظهر أجمل وأكثر مقروئية، وذلك بإتاحة إمكانية فصل الأقسام المنطقية في النمط وإضافة التعليقات إليه. عادة ما يجري تجاهل المسافات البيضاء ضمن الأنماط، باستثناء الحالات التي تكون فيها موجودة ضمن فئة حرف، أو عندما تكون مسبوقة بخط مائل عكسي غير مهرّب، أو مع رموز مثل *?، (?: أو (?P<...>. إن تضمّن سطر الرمز # خارج فئة حرف أو غير مسبوق بخط مائل عكسي غير مهرّب، فسيجري تجاهل جميع الحروف التي تأتي بعد هذا الرمز إلى نهاية السطر.
هذا يعني أنّ كائني التعبير النمطي التاليين -واللذين يطابقان أي عدد عشري- متماثلان:
a = re.compile(r"""\d + # the integral part
\. # the decimal point \d * # some fractional digits""", re.X)
b = re.compile(r"\d+\.\d*") هذه الراية مطابقة للراية السطرية (?x).
أمثلة
يبين المثال التالي طريقة استخدام الدالة re.compile():
prog = re.compile(pattern) result = prog.match(string) المثال السابق مطابق للمثال التالي: result = re.match(pattern, string)
صحيح أنّ المثالين السابقين متطابقان من الناحية العملية، إلا أنّ استخدام الدالة re.compile() وحفظ كائن التعبير النمطي الناتج عنها لإعادة استخدامه مرة أخرى يكون أكثر فعّالية عند وجود حاجة إلى استخدام التعبير النمطي نفسه عدة مرات في برنامج واحد.
ملاحظة: تخزّن النسخ المصرّفة حديثًا من التعابير النمطية الممرّرة إلى الدالة re.compile() ودوال المطابقة على مستوى الوحدة في الذاكرة المخبئية، لهذا السبب لا حاجة إلى تصريف التعابير النمطية في البرامج التي تستخدم عددًا قليلًا منها.