الفرق بين المراجعتين لصفحة: «Python/re/compile»
لا ملخص تعديل |
|||
سطر 93: | سطر 93: | ||
</syntaxhighlight>'''ملاحظة:''' تخزّن النسخ المصرّفة حديثًا من التعابير النمطية الممرّرة إلى الدالة <code>re.compile()</code> ودوال المطابقة على مستوى الوحدة في الذاكرة المخبئية، لهذا السبب لا حاجة إلى تصريف التعابير النمطية في البرامج التي تستخدم عددًا قليلًا منها. | </syntaxhighlight>'''ملاحظة:''' تخزّن النسخ المصرّفة حديثًا من التعابير النمطية الممرّرة إلى الدالة <code>re.compile()</code> ودوال المطابقة على مستوى الوحدة في الذاكرة المخبئية، لهذا السبب لا حاجة إلى تصريف التعابير النمطية في البرامج التي تستخدم عددًا قليلًا منها. | ||
==انظر أيضًا== | ==انظر أيضًا== | ||
*الدالة <code>[[Python/re/search|re.search()]]</code> في بايثون. | *الدالة <code>[[Python/re/search|re.search()]]</code> في بايثون: تفحص الدالة السلسلة النصية بحثًا عن أول موقع يحصل فيه تطابق مع التعبير النمطي المعطى، وتعيد [[Python/match|كائن <code>match</code>]] المقابل. | ||
*الدالة <code>[[Python/re/match|re.match()]]</code> في بايثون. | *الدالة <code>[[Python/re/match|re.match()]]</code> في بايثون: تفحص الدالة بداية السلسلة النصية بحثًا عن حالة تطابق مع التعبير النمطي المعطى، وتعيد [[Python/match|كائن <code>match</code>]] المقابل. | ||
*التابع <code>[[Python/regex/match|()regex.match]]</code> في بايثون. | *التابع <code>[[Python/regex/match|()regex.match]]</code> في بايثون: يفحص هذا التابع بداية السلسلة النصية المعطاة بحثًا عن حالة تطابق مع التعبير النمطي المصرّف، ويعيد كائن التطابق المقابل. | ||
*التابع <code>[[Python/regex/search|()regex.search]]</code> في بايثون. | *التابع <code>[[Python/regex/search|()regex.search]]</code> في بايثون: يفحص هذا التابع السلسلة النصية المعطاة بحثًا عن أول موقع يحصل فيه تطابق مع التعبير النمطي المصرّف، ويعيد كائن التطابق المقابل. | ||
==مصادر== | ==مصادر== | ||
<span> </span>[https://docs.python.org/3/library/re.html#module-contents قسم Module Contents في صفحة Regular expressions operations في توثيق بايثون الرسمي.] | * <span> </span>[https://docs.python.org/3/library/re.html#module-contents قسم Module Contents في صفحة Regular expressions operations في توثيق بايثون الرسمي.] | ||
[[تصنيف:Python]] | [[تصنيف:Python]] | ||
[[تصنيف:Python Regular Expressions]] | [[تصنيف:Python Regular Expressions]] | ||
[[تصنيف:Python Modules]] |
مراجعة 08:33، 11 يونيو 2018
تصرّف الدالة التعبير النمطي إلى كائن تعبير نمطي regex
يمكن استخدامه للمطابقة بواسطة توابعه الخاصّة 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
).
القيمة المعادة
تعيد الدالة كائن regex
الناتج عن تصريف التعبير النمطي المعطى.
أمثلة
يبين المثال التالي طريقة استخدام الدالة re.compile()
:
prog = re.compile(pattern)
result = prog.match(string)
المثال السابق مطابق للمثال التالي:
result = re.match(pattern, string)
صحيح أنّ المثالين السابقين متطابقان من الناحية العملية، إلا أنّ استخدام الدالة re.compile()
وحفظ كائن التعبير النمطي الناتج عنها لإعادة استخدامه مرة أخرى يكون أكثر فعّالية عند وجود حاجة إلى استخدام التعبير النمطي نفسه عدة مرات في برنامج واحد.
فيما يلي مثال عملي على استخدام الدالة:
>>> import re
>>> p = re.compile('[a-z]+')
>>> p
re.compile('[a-z]+')
ملاحظة: تخزّن النسخ المصرّفة حديثًا من التعابير النمطية الممرّرة إلى الدالة re.compile()
ودوال المطابقة على مستوى الوحدة في الذاكرة المخبئية، لهذا السبب لا حاجة إلى تصريف التعابير النمطية في البرامج التي تستخدم عددًا قليلًا منها.
انظر أيضًا
- الدالة
re.search()
في بايثون: تفحص الدالة السلسلة النصية بحثًا عن أول موقع يحصل فيه تطابق مع التعبير النمطي المعطى، وتعيد كائنmatch
المقابل. - الدالة
re.match()
في بايثون: تفحص الدالة بداية السلسلة النصية بحثًا عن حالة تطابق مع التعبير النمطي المعطى، وتعيد كائنmatch
المقابل. - التابع
()regex.match
في بايثون: يفحص هذا التابع بداية السلسلة النصية المعطاة بحثًا عن حالة تطابق مع التعبير النمطي المصرّف، ويعيد كائن التطابق المقابل. - التابع
()regex.search
في بايثون: يفحص هذا التابع السلسلة النصية المعطاة بحثًا عن أول موقع يحصل فيه تطابق مع التعبير النمطي المصرّف، ويعيد كائن التطابق المقابل.