Python: Ελέγξτε αν η συμβολοσειρά περιέχει υποσυμβολοσειρά

Ο έλεγχος εάν μια συμβολοσειρά περιέχει μια υποσυμβολοσειρά βοηθά στη γενίκευση των συνθηκών και στη δημιουργία πιο ευέλικτου κώδικα. Επιπλέον, ανάλογα με το μοντέλο του τομέα σας – ο έλεγχος εάν μια συμβολοσειρά περιέχει μια υποσυμβολοσειρά μπορεί επίσης να σας επιτρέψει να συμπεράνετε πεδία ενός αντικειμένου, εάν μια συμβολοσειρά κωδικοποιεί ένα πεδίο από μόνη της.

Σε αυτόν τον οδηγό, θα ρίξουμε μια ματιά πώς να ελέγξετε εάν μια συμβολοσειρά περιέχει μια υποσυμβολοσειρά στο Python.

Η in Χειριστής

Ο ευκολότερος τρόπος για να ελέγξετε εάν μια συμβολοσειρά Python περιέχει μια υποσυμβολοσειρά είναι να χρησιμοποιήσετε το in χειριστής.

Η in Ο τελεστής χρησιμοποιείται για τον έλεγχο δομών δεδομένων για συμμετοχή στην Python. Επιστρέφει ένα Boolean (είτε 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 στο Google και πραγματικά μαθαίνουν το!

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!"

Αυτή η μέθοδος είναι καλύτερη εάν χρειάζεστε μια πιο σύνθετη συνάρτηση αντιστοίχισης, όπως αντιστοίχιση χωρίς διάκριση πεζών-κεφαλαίων, ή εάν έχετε να κάνετε με μεγάλους χώρους αναζήτησης. Διαφορετικά, η επιπλοκή και η χαμηλότερη ταχύτητα του regex θα πρέπει να αποφεύγονται για απλές περιπτώσεις χρήσης που ταιριάζουν με υποσυμβολοσειρά.

Σχετικά με το Συγγραφέας

Αυτό το άρθρο γράφτηκε από τον Jacob Stopak, έναν σύμβουλο λογισμικού και προγραμματιστή με πάθος να βοηθά άλλους να βελτιώσουν τη ζωή τους μέσω κώδικα. Ο Jacob είναι ο δημιουργός του Αρχική δέσμευση – ένας ιστότοπος αφιερωμένος στο να βοηθά τους περίεργους προγραμματιστές να μάθουν πώς κωδικοποιούνται τα αγαπημένα τους προγράμματα. Το προτεινόμενο έργο του βοηθά τους ανθρώπους μάθετε Git σε επίπεδο κώδικα.

Σφραγίδα ώρας:

Περισσότερα από Stackabuse