مقدمة عن دالة rfind()
تُعد دالة rfind() إحدى الدوال المدمجة والقوية في بايثون، والمخصصة للتعامل مع السلاسل النصية (strings). وظيفتها الأساسية هي البحث عن آخر ظهور (من جهة اليمين) لسلسلة نصية فرعية (sub-string) داخل سلسلة نصية أخرى، وإرجاع فهرس (index) أول خانة تبدأ منها هذه السلسلة الفرعية. ما يميز rfind() هو أن عملية البحث تبدأ بشكل عكسي (Reversed) من نهاية السلسلة النصية التي تم استدعاؤها عليها وصولاً إلى بدايتها.
الفرق بين rfind() و find()
الفرق الجوهري بين rfind() ودالة find() هو اتجاه البحث. فبينما تبدأ find() البحث من بداية السلسلة النصية إلى نهايتها، تبدأ rfind() البحث من نهاية السلسلة النصية رجوعاً إلى بدايتها. ومع ذلك، يجب ملاحظة أن كلتا الدالتين ترجعان فهرس أول حرف من السلسلة الفرعية المطابقة.
بناء الدالة (Syntax)
يتمثل بناء دالة rfind() في الشكل التالي:
str.rfind(sub[, start[, end]])الباراميترات (Parameters)
sub: (إلزامي) عبارة عن سلسلة نصية (str) تمثل النص الذي نريد البحث عنه داخل السلسلة الأصلية.start: (اختياري) يحدد الفهرس الذي سيبدأ منه البحث (شاملاً). إذا تم تحديده، فإن البحث سيقتصر على الجزء من السلسلة النصية بدءًا من هذا الفهرس. القيمة الافتراضية هي 0.end: (اختياري) يحدد الفهرس الذي سينتهي عنده البحث (غير شامل). إذا تم تحديده، فإن البحث سيقتصر على الجزء من السلسلة النصية حتى هذا الفهرس. القيمة الافتراضية هي طول السلسلة النصية.
بمعنى آخر، يتم البحث داخل الشريحة s[start:end]، وتبدأ rfind() البحث من أقصى يمين هذه الشريحة (أي من الفهرس end-1) وتتجه يساراً حتى الفهرس start.
قيمة الإرجاع (Return Value)
ترجع الدالة rfind() فهرس أول خانة (من جهة اليمين) في السلسلة النصية التي قامت باستدعائها يوجد عندها النص الذي تم تمريره كباراميتر sub.
في حال لم يتم العثور على النص المراد البحث عنه ضمن النطاق المحدد، فإنها ترجع القيمة -1.
مثال عملي
لنوضح كيفية عمل دالة rfind() من خلال المثال التالي:
# Test.py
# هنا قمنا بتعريف متغير نصي إسمه s
s = 'Python is a programming language. Python is easy to learn.'
# هنا قمنا بطباعة رقم آخر خانة في المتغير s يوجد عندها النص 'P'
# و بالتالي سيتم طباعة 34
print(s.rfind('P'))
# هنا قمنا بطباعة رقم آخر خانة في المتغير s يوجد عندها النص 'Python'
# و بالتالي سيتم طباعة 34
print(s.rfind('Python'))
# هنا قمنا بطباعة رقم آخر خانة في المتغير s يوجد عندها النص 'Python'
# هنا عملية البحث تمت في الشريحة النصية التي تبدأ من الفهرس 10 وحتى نهاية السلسلة الأصلية (s[10:]).
# و بالتالي سيتم طباعة 34
print(s.rfind('Python', 10))
# هنا قمنا بطباعة رقم أول خانة في المتغير s يوجد عندها النص 'Java'
# و بما أنه لا يوجد هذه الكلمة سيتم طباعة -1
print(s.rfind('Java'))النتيجة (Output)
34
34
34
-1