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, עם שיטות עבודה מומלצות, סטנדרטים מקובלים בתעשייה ודף רמאות כלול. תפסיק לגוגל פקודות 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 ברמת הקוד.

בול זמן:

עוד מ Stackabuse