Python: تحقق مما إذا كانت السلسلة تحتوي على سلسلة فرعية

التحقق مما إذا كانت السلسلة تحتوي على سلسلة فرعية تساعد على تعميم الشروط وإنشاء كود أكثر مرونة. بالإضافة إلى ذلك ، اعتمادًا على نموذج المجال الخاص بك - التحقق مما إذا كانت السلسلة تحتوي على سلسلة فرعية قد يسمح لك أيضًا باستنتاج حقول كائن ، إذا كانت السلسلة ترمز إلى حقل في حد ذاته.

في هذا الدليل ، سنلقي نظرة على كيفية التحقق مما إذا كانت السلسلة تحتوي على سلسلة فرعية في بيثون.

in المُشغل

أسهل طريقة للتحقق مما إذا كانت سلسلة Python تحتوي على سلسلة فرعية هي استخدام ملحق in المشغل.

in يتم استخدام عامل التشغيل للتحقق من هياكل البيانات للعضوية في Python. تقوم بإرجاع قيمة منطقية (إما True or False). للتحقق مما إذا كانت السلسلة تحتوي على سلسلة فرعية في Python باستخدام in عامل التشغيل ، نحن ببساطة نستدعيه على السلسلة الفائقة:

fullstring = "StackAbuse"
substring = "tack"

if substring in fullstring:
    print("Found!")
else:
    print("Not found!")

هذا العامل هو اختصار لاستدعاء كائن __contains__ وهي تعمل بشكل جيد للتحقق مما إذا كان العنصر موجودًا في القائمة. من الجدير بالذكر أنه ليست خالية من الآمان، لذلك إذا كان لدينا fullstring كان يشير إلى None، سيتم طرح استثناء:

TypeError: argument of type 'NoneType' is not iterable

لتجنب ذلك ، ستحتاج أولاً إلى التحقق مما إذا كان يشير إلى None أم لا:

fullstring = None
substring = "tack"

if fullstring != None and substring in fullstring:
    print("Found!")
else:
    print("Not found!")

String.index () خدمة التوصيل

نوع String في Python له طريقة تسمى index() التي يمكن استخدامها للعثور على فهرس البداية للتواجد الأول لسلسلة فرعية في سلسلة.

إذا لم يتم العثور على السلسلة الفرعية ، أ ValueError تم طرح استثناء ، والذي يمكن معالجته باستخدام كتلة try-except-else:

fullstring = "StackAbuse"
substring = "tack"

try:
    fullstring.index(substring)
except ValueError:
    print("Not found!")
else:
    print("Found!")

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

print(fullstring.index(substring))

على الرغم من - من أجل التحقق مما إذا كانت السلسلة تحتوي على سلسلة فرعية ، فهذه طريقة مطولة.

طريقة String.find ()

فئة String لها طريقة أخرى تسمى find() وهو أكثر ملاءمة للاستخدام من index()، ويرجع ذلك أساسًا إلى أننا لا داعي للقلق بشأن التعامل مع أي استثناءات.

If find() لا يعثر على تطابق ، فإنه يعيد -1 ، وإلا فإنه يعرض فهرس أقصى اليسار من السلسلة الفرعية في السلسلة الأكبر:

تحقق من دليلنا العملي العملي لتعلم Git ، مع أفضل الممارسات ، والمعايير المقبولة في الصناعة ، وورقة الغش المضمنة. توقف عن أوامر Googling Git وفي الواقع تعلم ذلك!

fullstring = "StackAbuse"
substring = "tack"

if fullstring.find(substring) != -1:
    print("Found!")
else:
    print("Not found!")

وبطبيعة الحال ، فإنه يؤدي نفس البحث مثل index() ويعيد فهرس بداية السلسلة الفرعية داخل السلسلة الأصل:

print(fullstring.find(substring))

التعبيرات العادية (RegEx)

توفر التعبيرات العادية طريقة أكثر مرونة (وإن كانت أكثر تعقيدًا) للتحقق من السلاسل لمطابقة الأنماط. باستخدام التعبيرات العادية ، يمكنك إجراء عمليات بحث مرنة وفعالة من خلال مساحات بحث أكبر بكثير ، بدلاً من عمليات التحقق البسيطة ، مثل عمليات التحقق السابقة.

يتم شحن Python بوحدة نمطية مضمنة للتعبيرات العادية تسمى re. re تحتوي الوحدة النمطية على وظيفة تسمى search()، والتي يمكننا استخدامها لمطابقة نمط السلسلة الفرعية:

from re import search

fullstring = "StackAbuse"
substring = "tack"

if search(substring, fullstring):
    print "Found!"
else:
    print "Not found!"

هذه الطريقة هي الأفضل إذا كنت بحاجة إلى وظيفة مطابقة أكثر تعقيدًا ، مثل المطابقة غير الحساسة لحالة الأحرف ، أو إذا كنت تتعامل مع مساحات بحث كبيرة. وبخلاف ذلك ، يجب تجنب المضاعفات والسرعة البطيئة للتعبير المنطقي البسيط لمطابقة سلاسل فرعية بسيطة - حالات الاستخدام.

عن المؤلف

كتب هذا المقال جاكوب ستوباك ، مستشار ومطور برمجيات لديه شغف لمساعدة الآخرين على تحسين حياتهم من خلال الكود. يعقوب هو خالق الأولي ارتكاب - موقع مخصص لمساعدة المطورين الفضوليين على تعلم كيفية ترميز برامجهم المفضلة. مشروعها المميز يساعد الناس تعلم Git على مستوى الكود.

الطابع الزمني:

اكثر من ستاكابوز