پایتون: بررسی کنید که آیا رشته حاوی رشته فرعی است یا خیر

بررسی اینکه آیا یک رشته دارای یک رشته فرعی است یا خیر، به تعمیم شرط ها و ایجاد کد انعطاف پذیرتر کمک می کند. علاوه بر این، بسته به مدل دامنه شما - بررسی اینکه آیا یک رشته حاوی یک رشته فرعی است نیز ممکن است به شما اجازه دهد که فیلدهای یک شی را استنتاج کنید، اگر رشته ای فیلد را به خودی خود کد می کند.

در این راهنما، نگاهی خواهیم داشت چگونه بررسی کنیم که آیا یک رشته دارای یک رشته فرعی است یا خیر در پایتون

La in اپراتور

ساده ترین راه برای بررسی اینکه آیا یک رشته پایتون دارای زیررشته است یا خیر، استفاده از آن است in اپراتور.

La in عملگر برای بررسی ساختارهای داده برای عضویت در پایتون استفاده می شود. یک Boolean (یا True or False). برای بررسی اینکه آیا یک رشته دارای زیررشته در پایتون با استفاده از 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!")

La String.index() روش

نوع String در پایتون متدی به نام دارد index() که می تواند برای یافتن شاخص شروع اولین وقوع یک زیر رشته در یک رشته استفاده شود.

اگر رشته فرعی پیدا نشد، a 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 را با بهترین روش ها، استانداردهای پذیرفته شده در صنعت و برگه تقلب شامل بررسی کنید. دستورات Google Git را متوقف کنید و در واقع یاد گرفتن آی تی!

fullstring = "StackAbuse"
substring = "tack"

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

طبیعتاً همان جستجو را انجام می دهد index() و شاخص شروع رشته فرعی را در رشته والد برمی گرداند:

print(fullstring.find(substring))

عبارات منظم (RegEx)

عبارات منظم روشی انعطاف‌پذیرتر (البته پیچیده‌تر) برای بررسی رشته‌ها برای تطابق الگو ارائه می‌کنند. با Regular Expressions، می‌توانید جستجوهای انعطاف‌پذیر و قدرتمندی را از طریق فضاهای جستجوی بسیار بزرگ‌تر انجام دهید، نه بررسی‌های ساده، مانند موارد قبلی.

پایتون با یک ماژول داخلی برای عبارات منظم ارسال می شود که نام دارد re. re ماژول حاوی تابعی به نام search()، که می توانیم از آن برای مطابقت با یک الگوی زیر رشته ای استفاده کنیم:

from re import search

fullstring = "StackAbuse"
substring = "tack"

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

اگر به یک تابع تطبیق پیچیده تری نیاز دارید، مانند تطبیق بدون حساس به حروف بزرگ، یا اگر با فضاهای جستجوی بزرگ سر و کار دارید، این روش بهترین است. در غیر این صورت باید از پیچیدگی و سرعت آهسته تر regex برای موارد استفاده ساده زیر رشته تطبیق اجتناب شود.

درباره نویسنده

این مقاله توسط Jacob Stopak، مشاور و توسعه‌دهنده نرم‌افزار با علاقه به کمک به دیگران برای بهبود زندگی خود از طریق کد نوشته شده است. یعقوب خالق است تعهد اولیه – سایتی اختصاص داده شده برای کمک به توسعه دهندگان کنجکاو در یادگیری نحوه کدگذاری برنامه های مورد علاقه آنها. پروژه برجسته آن به مردم کمک می کند Git را یاد بگیرید در سطح کد

تمبر زمان:

بیشتر از Stackabuse