التابع match.group()‎ في بايثون

من موسوعة حسوب
< Python‏ | match
مراجعة 14:54، 18 يونيو 2018 بواسطة عبد اللطيف ايمش (نقاش | مساهمات)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)
اذهب إلى التنقل اذهب إلى البحث

يعيد التابع مجموعة فرعية واحدة أو أكثر من المجموعات الموجودة في كائن التطابق.

البنية العامة

match.group([group1, ...])

المعاملات

group1

يأخذ هذا التابع معاملًا واحدًا أو أكثر، وهو عبارة عن عدد صحيح يمثّل رقم المجموعة المراد معرفة قيمتها.

القيمة المعادة

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

إن كان المعامل groupN (تمثّل N أي عدد صحيح موجب) مساويًا للصفر، فإنّ القيمة المعادة التي تقابل هذه القيمة هي سلسلة التطابق بأكملها، وإن كانت ضمن المدى ‎[1..99]‎، فإن القيمة المعادة هي السلسلة التي تطابق المجموعة المقابلة والمحاطة بالأقواس. إن كان رقم المجموعة سالبًا أو أكبر من عدد المجاميع المعرّفة في التعبير النمطي، تُطلق اللغة الاستثناء IndexError. إن كانت مجموعة ما موجودة في الجزء الذي لم يطابق من التعبير النمطي، فإن النتيجة المقابلة هي القيمة None، وإن كانت مجموعة ما موجودة في الجزء الذي طابق عدّة مرات فإنّ الحالة التطابق الأخيرة تكون هي القيمة المعادة.

أمثلة

يبين المثال التالي النتائج المعادة من هذا التابع:

>>> import re
>>> m = re.match(r"(\w+) (\w+)", "Isaac Newton, physicist")
>>> m.group(0)       # حالة التطابق بأكملها
'Isaac Newton'
>>> m.group(1)       # المجموعة الفرعية الأولى.‏
'Isaac'
>>> m.group(2)       # المجموعة الفرعية الثانية.‏
'Newton'
>>> m.group(1, 2)    # المعاملات المتعددة تعيد صفًّا.‏
('Isaac', 'Newton')

إن استخدم التعبير النمطي الصيغة (‎?P<name>...‎) فيمكن للمعاملات groupN أن تكون سلاسل نصية أيضًا تحدّد المجاميع بواسطة اسم المجموعة.

إن لم يستخدم معامل نصي كاسم للمجموعة ضمن التعبير النمطي، فإن اللغة تطلق الاستثناء IndexError.

مثال:

>>> m = re.match(r"(?P<first_name>\w+) (?P<last_name>\w+)", "Malcolm Reynolds")
>>> m.group('first_name')
'Malcolm'
>>> m.group('last_name')
'Reynolds'

يمكن الإشارة إلى المجاميع المسمّاة بواسطة فهارسها:

>>> m.group(1)
'Malcolm'
>>> m.group(2)
'Reynolds'

إن طابقت مجموعة ما عدة مرات، فيمكن الوصول إلى التطابق الأخير فقط:

>>> m = re.match(r"(..)+", "a1b2c3")  # هناك ثلاث حالات تطابق.‏
>>> m.group(1)                        # تعاد حالة التطابق الأخيرة فقط.‏
'c3'

انظر أيضًا

  • التابع match.__getitem__()‎: يؤدي هذا التابع عملًا مماثلًا للتابع match.group(g)‎، ويسهّل عملية الوصول إلى المجاميع المفردة في تطابق معين باستخدام الصيغة m[g]‎.

مصادر