توفر بايثون عدة طرق فعالة لتحديد ما إذا كانت سلسلة نصية تحتوي على سلسلة فرعية. تستعرض هذه المقالة ثلاث طرق شائعة: عامل التشغيل in
، وطريقة str.find()
، وطريقة str.index()
، مع مقارنة وظائفها ومساعدتك في اختيار النهج الأنسب لاحتياجاتك المحددة.
جدول المحتويات
عامل التشغيل in
يقدم عامل التشغيل in
أبسط الحلول وأكثرها قابلية للقراءة للتحقق من وجود سلسلة فرعية. فهو يُرجع True
إذا تم العثور على السلسلة الفرعية، و False
بخلاف ذلك. وهذا يجعله مثاليًا عندما تحتاج فقط إلى معرفة ما إذا كانت سلسلة فرعية موجودة أم لا، وليس موقعها.
main_string = "This is a sample string."
substring = "sample"
if substring in main_string:
print(f"السلسلة الفرعية '{substring}' موجودة في السلسلة.")
else:
print(f"السلسلة الفرعية '{substring}' غير موجودة في السلسلة.")
طريقة str.find()
توفر طريقة str.find()
نهجًا أكثر تفصيلًا. فهي تُرجع الفهرس الأولي لأول ظهور للسلسلة الفرعية إذا تم العثور عليها؛ وإلا، فإنها تُرجع -1. هذا يسمح لك بالتحقق من وجود السلسلة الفرعية وتحديد موقعها. كما أنها حساسة لحالة الأحرف.
main_string = "This is a sample string."
substring = "sample"
index = main_string.find(substring)
if index != -1:
print(f"تم العثور على السلسلة الفرعية '{substring}' عند الفهرس {index}.")
else:
print(f"السلسلة الفرعية '{substring}' غير موجودة في السلسلة.")
طريقة str.index()
على غرار str.find()
، تُرجع str.index()
الفهرس الأولي للسلسلة الفرعية. ومع ذلك، إذا لم يتم العثور على السلسلة الفرعية، فإنها تُثير استثناء ValueError
. هذا يجعلها أقل ملاءمة للتحقق من الوجود البسيط ما لم تكن متأكدًا من وجود السلسلة الفرعية وتريد معالجة الخطأ المحتمل بشكل صريح.
main_string = "This is a sample string."
substring = "sample"
try:
index = main_string.index(substring)
print(f"تم العثور على السلسلة الفرعية '{substring}' عند الفهرس {index}.")
except ValueError:
print(f"السلسلة الفرعية '{substring}' غير موجودة في السلسلة.")
اختيار الطريقة المناسبة
تعتمد الطريقة المثلى على متطلباتك المحددة:
- للتحقق من الوجود البسيط، يكون عامل التشغيل
in
هو الأكثر كفاءة وقابلية للقراءة. - للعثور على موقع السلسلة الفرعية ومعالجة غيابها المحتمل بشكل سلس، يُفضل استخدام
str.find()
. - استخدم
str.index()
فقط عندما تكون متأكدًا من وجود السلسلة الفرعية وتحتاج إلى معالجة استثناءValueError
. فهي تضيف تعقيدًا غير ضروري بخلاف ذلك.
تذكر أن جميع الطرق الثلاث حساسة لحالة الأحرف. للبحث غير الحساس لحالة الأحرف، ضع في اعتبارك استخدام طريقة .lower()
على كل من السلسلة الرئيسية والسلسلة الفرعية قبل إجراء التحقق.