الفرق بين المراجعتين لصفحة: «Python/re/compile»
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:الدالة <code>re.compile()</code> في بايثون}}</noinclude> تصرّف الدالة التعبير النمطي إلى كائن...' |
لا ملخص تعديل |
||
سطر 1: | سطر 1: | ||
<noinclude>{{DISPLAYTITLE:الدالة <code>re.compile()</code> في بايثون}}</noinclude> | <noinclude>{{DISPLAYTITLE:الدالة <code>re.compile()</code> في بايثون}}</noinclude> | ||
تصرّف الدالة التعبير النمطي إلى كائن تعبير نمطي يمكن استخدامه للمطابقة بواسطة توابعه الخاصّة match() و search() وغيرها. | تصرّف الدالة التعبير النمطي إلى كائن تعبير نمطي <code>regex</code> يمكن استخدامه للمطابقة بواسطة توابعه الخاصّة <code>[[Python/regex/match|match()]]</code> و <code>[[Python/regex/search|search()]]</code> وغيرها. | ||
==البنية العامة== | |||
== البنية العامة == | |||
<syntaxhighlight lang="python3"> | <syntaxhighlight lang="python3"> | ||
re.compile(pattern, flag=0) | re.compile(pattern, flag=0) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==المعاملات== | |||
===<code>pattern</code>=== | |||
التعبير النمطي المراد تصريفه. | |||
===<code>flags</code>=== | |||
يمكن تحديد طريقة التعامل مع التعبير النمطي باستخدام قيم الرايات، ويمكن استخدام أكثر من راية وذلك بفصلها بعامل OR الخاص بالأعداد الثنائية (العامل <code>|</code>). | |||
يمكن استخدام المتغيرات التالية كقيم للمعامل <code>flags</code>: | |||
<code>re.A</code> | |||
<code>re.ASCII</code> | |||
يؤدي استخدام هذه الراية إلى جعل عملية المطابقة الخاصة بالتسلسلات <code>\w</code> ،<code>\W</code> ،<code>\b</code> ،<code>\B</code> ،<code>\d</code> ،<code>\D</code> ،<code>\s</code> و <code>\S</code> محصورة بالترميز ASCII عوضًا عن الترميز Unicode. تعمل هذه الراية مع أنماط Unicode فقط، ويتم تجاهلها في أنماط البايتات لأنّها تكون بلا معنى. هذه الراية مطابقة للراية السطرية <code>(?a)</code>. | |||
جدير بالذكر أنّه لغرض الإبقاء على التوافق مع الإصدارات القديمة، فإنّ الراية <code>re.U</code> لا زالت موجودة (إضافة إلى الراية المرادفة <code>re.UNICODE</code> والراية السطرية <code>(?u)</code>) ولكنّها أصبحت مهملة في الإصدار 3 من بايثون نظرًا لكون عمليات المطابقة في هذا الإصدار تجري ضمن ترميز Unicode بصورة افتراضية في السلاسلة النصية (ولا يسمح بإجراء المطابقة على البايتات باستخدام ترميز Unicode). | |||
<code>re.DEBUG</code> | |||
تعرض هذه الراية معلومات التنقيح الخاصة بالتعبير النمطي المصرّف، ولا وجود لراية ضمنية مماثلة. | تعرض هذه الراية معلومات التنقيح الخاصة بالتعبير النمطي المصرّف، ولا وجود لراية ضمنية مماثلة. | ||
re.I | <code>re.I</code> | ||
re.IGNORECASE | |||
<code>re.IGNORECASE</code> | |||
يؤدي استخدام هذه الراية إلى تجاهل حالة الأحرف عند إجراء عملية المطابقة، وبهذا يطابق التعبير <code>[A-Z]</code> الأحرف الصغيرة أيضًا. ولا تقتصر عملية المطابقة على الحروف العادية، بل تتجاوزها إلى حروف Unicode برمّتها (كأن يطابق Ü الحرف ü)، إلا إذا استُخدمت الراية <code>re.ASCII</code> لتعطيل عمليات المطابقة خارج نطاق ترميز ASCII. لا تؤثر الإعدادات المحلية الحالية على عمل هذه الراية إلا إذا استُخدمت الراية <code>re.LOCALE</code>. الراية السطرية المقابلة هي <code>(?i)</code>. | |||
من الجدير بالذكر أنّه عند استخدام أنماط Unicode <code>[a-z]</code> أو <code>[A-Z]</code> إلى جانب الراية <code>IGNORECASE</code> فإنّ النمطين سيطابقان 52 حرفًا من حروف الترميز ASCII إلى جانب 4 أحرف خارج هذا الترميز وهي: 'İ' (حرف I اللاتيني الكبير مع نقطة فوقه، <code>U+0130</code>)، و 'ı' (حرف i اللاتيني الصغير بدون نقطة، <code>U+0131</code>)، و 'ſ' (حرف s الطويل اللاتيني الصغير، <code>U+017F</code>) و 'K' (علامة كلفن، <code>U+212A</code>). إن استخدمت الراية ASCII فستطابق الحروف 'a' إلى 'z' و 'A' إلى 'Z' فقط. (ولكن الراية تؤثر على التعبير النمطي بأكمله، لذا ينصح باستخدام التعبير <code>(?-i:[a-zA-Z])</code> في مثل هذه الحالات). | |||
<code>re.L</code> | |||
<code>re.LOCALE</code> | |||
يؤدي استخدام هذه الراية إلى جعل عملية المطابقة باستخدام التسلسلات <code>\w</code>، <code>\W</code>، <code>\b</code>، <code>\B</code> وعمليات المطابقة التي تكون حساسة لحالة الأحرف، تعتمد على الإعدادات المحلية. يمكن استخدام هذه الراية مع أنماط البايتات فقط، ولكن لا ينصح باستخدام هذه الراية نظرًا لعدم إمكانية الاعتماد على آلية عمل الإعدادات المحلية، إذ أنّها تتعامل مع "دولة culture" واحدة في الوقت ذاته، ولا تعمل إلا مع إعدادات 8-بت المحلية. يتيح الإصدار 3 من بايثون إجراء عمليات المطابقة للسلاسل النصية بترميز Unicode، إلى جانب قدرته على التعامل مع إعدادات محلية ولغات عالمية مختلفة. هذه الراية مطابقة للراية السطرية <code>(?L)</code>. | |||
re. | '''ملاحظة:''' منذ الإصدار 3.6 من اللغة أصبح استخدام الراية <code>re.LOCALE</code> مقصورًا على أنماط البايتات، ولا يمكن استخدامها مع الراية <code>re.ASCII</code>. | ||
re. | |||
<code>re.M</code> | |||
<code>re.MULTILINE</code> | |||
re.MULTILINE | |||
عند استخدام هذه الراية يطابق المحرف '^' في بداية السلسلة النصية وفي بداية كلّ سطر فيها (ما يأتي مباشرة بعد كل محرف سطر جديد)، ويطابق المحرف '$' في نهاية السلسلة النصية وفي نهاية كلّ سطر فيها (أي ما يسبق كل محرف سطر جديد مباشرة | عند استخدام هذه الراية يطابق المحرف <code>'^'</code> في بداية السلسلة النصية وفي بداية كلّ سطر فيها (ما يأتي مباشرة بعد كل محرف سطر جديد)، ويطابق المحرف <code>'$'</code> في نهاية السلسلة النصية وفي نهاية كلّ سطر فيها (أي ما يسبق كل محرف سطر جديد مباشرة). | ||
يطابق المحرف <code>'^'</code> بصورة افتراضية بداية السلسلة النصية فقط، ويطابق المحرف <code>'$'</code> نهايتها فقط، وقبل محرف السطر الجديد (إن وجد) في نهاية السلسلة النصية. هذه الراية مطابقة للراية السطرية <code>(?m)</code>. | |||
re.S | <code>re.S</code> | ||
<code>re.DOTALL</code> | |||
باستخدام هذه الراية سيطابق المحرف الخاص <code>'.'</code> جميع الحروف إلى جانب محرف السطر الجديد، وبدونها يطابق المحرف <code>'.'</code> جميع الحروف باستثناء محرف السطر الجديد. | |||
هذه الراية مطابقة للراية السطرية <code>(?s)</code>. | |||
<code>re.X</code> | |||
<code>re.VERBOSE</code> | |||
تتيح هذه الراية كتابة تعابير نمطية ذات مظهر أجمل وأكثر مقروئية، وذلك بإتاحة إمكانية تقسيم التعبير النمطي إلى أقسام متعددة، وإضافة التعليقات إليه. | |||
عادة ما يجري تجاهل المسافات البيضاء ضمن الأنماط، باستثناء الحالات التي تكون فيها موجودة ضمن فئة حرف، أو عندما تكون مسبوقة بخط مائل عكسي غير مهرّب، أو مع رموز مثل <code>*?</code>، <code>(?:</code> أو <code>(?P<...></code>. | |||
إن تضمّن سطر الرمز <code>#</code> خارج فئة حرف أو غير مسبوق بخط مائل عكسي غير مهرّب، فسيجري تجاهل جميع الحروف التي تأتي بعد هذا الرمز إلى نهاية السطر. | |||
هذا يعني أنّ كائني التعبير النمطي التاليين -واللذين يطابقان أي عدد عشري- متماثلان:<syntaxhighlight lang="python3"> | |||
a = re.compile(r"""\d + # the integral part | a = re.compile(r"""\d + # the integral part | ||
\. # the decimal point | \. # the decimal point | ||
\d * # some fractional digits""", re.X) | \d * # some fractional digits""", re.X) | ||
b = re.compile(r"\d+\.\d*") | b = re.compile(r"\d+\.\d*") | ||
هذه الراية مطابقة للراية السطرية (?x). | </syntaxhighlight>هذه الراية مطابقة للراية السطرية (<code>?x</code>). | ||
==أمثلة== | |||
== أمثلة == | يبين المثال التالي طريقة استخدام الدالة <code>re.compile()</code>:<syntaxhighlight lang="python3"> | ||
يبين المثال التالي طريقة استخدام الدالة re.compile(): | |||
prog = re.compile(pattern) | prog = re.compile(pattern) | ||
result = prog.match(string) | result = prog.match(string) | ||
المثال السابق مطابق للمثال التالي: | </syntaxhighlight>المثال السابق مطابق للمثال التالي:<syntaxhighlight lang="python3"> | ||
result = re.match(pattern, string) | result = re.match(pattern, string) | ||
</syntaxhighlight>صحيح أنّ المثالين السابقين متطابقان من الناحية العملية، إلا أنّ استخدام الدالة <code>re.compile()</code> وحفظ كائن التعبير النمطي الناتج عنها لإعادة استخدامه مرة أخرى يكون أكثر فعّالية عند وجود حاجة إلى استخدام التعبير النمطي نفسه عدة مرات في برنامج واحد. | |||
'''ملاحظة:''' تخزّن النسخ المصرّفة حديثًا من التعابير النمطية الممرّرة إلى الدالة <code>re.compile()</code> ودوال المطابقة على مستوى الوحدة في الذاكرة المخبئية، لهذا السبب لا حاجة إلى تصريف التعابير النمطية في البرامج التي تستخدم عددًا قليلًا منها. | |||
== انظر أيضًا == | |||
* التابع <code>[[Python/regex/match|()regex.match]]</code> في بايثون. | |||
* التابع <code>[[Python/regex/search|()regex.search]]</code> في بايثون. | |||
== مصادر == | |||
* [https://docs.python.org/3/library/re.html#module-contents قسم Module Contents في صفحة Regular expressions operations في توثيق بايثون الرسمي.] | |||
[[تصنيف:Python]] | |||
[[تصنيف:Python Regular Expressions]] |
مراجعة 10:30، 31 مايو 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
).
أمثلة
يبين المثال التالي طريقة استخدام الدالة re.compile()
:
prog = re.compile(pattern)
result = prog.match(string)
المثال السابق مطابق للمثال التالي:
result = re.match(pattern, string)
صحيح أنّ المثالين السابقين متطابقان من الناحية العملية، إلا أنّ استخدام الدالة re.compile()
وحفظ كائن التعبير النمطي الناتج عنها لإعادة استخدامه مرة أخرى يكون أكثر فعّالية عند وجود حاجة إلى استخدام التعبير النمطي نفسه عدة مرات في برنامج واحد.
ملاحظة: تخزّن النسخ المصرّفة حديثًا من التعابير النمطية الممرّرة إلى الدالة re.compile()
ودوال المطابقة على مستوى الوحدة في الذاكرة المخبئية، لهذا السبب لا حاجة إلى تصريف التعابير النمطية في البرامج التي تستخدم عددًا قليلًا منها.
انظر أيضًا
- التابع
()regex.match
في بايثون. - التابع
()regex.search
في بايثون.