Python: Preverite, ali niz vsebuje podniz

Preverjanje, ali niz vsebuje podniz, pomaga posplošiti pogojnike in ustvariti bolj prilagodljivo kodo. Poleg tega vam lahko glede na vaš model domene preverjanje, ali niz vsebuje podniz, omogoči tudi sklepanje polj predmeta, če niz sam po sebi kodira polje.

V tem priročniku si bomo ogledali kako preveriti, ali niz vsebuje podniz v Pythonu.

O in Operater

Najlažji način za preverjanje, ali niz Python vsebuje podniz, je uporaba in operater.

O in se uporablja za preverjanje članstva podatkovnih struktur v Pythonu. Vrne logično vrednost (bodisi True or False). Če želite preveriti, ali niz vsebuje podniz v Pythonu, uporabite in operator, ga preprosto prikličemo v supernizu:

fullstring = "StackAbuse"
substring = "tack"

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

Ta operator je okrajšava za klicanje objekta __contains__ in deluje dobro tudi pri preverjanju, ali element obstaja na seznamu. Omeniti velja, da je ni null-safe, torej če naš fullstring je kazal na None, bi bila vržena izjema:

TypeError: argument of type 'NoneType' is not iterable

Da bi se temu izognili, boste najprej želeli preveriti, ali kaže na None ali ne:

fullstring = None
substring = "tack"

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

O String.index() Metoda

Vrsta String v Pythonu ima imenovano metodo index() ki se lahko uporabi za iskanje začetnega indeksa prve pojavitve podniza v nizu.

Če podniza ni mogoče najti, a ValueError vržena je izjema, ki jo je mogoče obravnavati z blokom try-except-else:

fullstring = "StackAbuse"
substring = "tack"

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

Ta metoda je uporabna, če morate poznati tudi pozicijo podniza, v nasprotju s samo njegovim obstojem v celotnem nizu. Metoda sama vrne indeks:

print(fullstring.index(substring))

Vendar – zaradi preverjanja, ali niz vsebuje podniz, je to besedni pristop.

Metoda String.find().

Razred String ima drugo imenovano metodo find() ki je bolj priročen za uporabo kot index(), predvsem zato, ker nam ni treba skrbeti za obravnavo izjem.

If find() ne najde ujemanja, vrne -1, sicer vrne skrajni levi indeks podniza v večjem nizu:

Oglejte si naš praktični, praktični vodnik za učenje Gita z najboljšimi praksami, standardi, sprejetimi v panogi, in priloženo goljufijo. Nehajte Googlati ukaze Git in pravzaprav naučiti it!

fullstring = "StackAbuse"
substring = "tack"

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

Seveda izvaja enako iskanje kot index() in vrne indeks začetka podniza znotraj nadrejenega niza:

print(fullstring.find(substring))

Regularni izrazi (RegEx)

Regularni izrazi zagotavljajo bolj prilagodljiv (čeprav bolj zapleten) način za preverjanje ujemanja nizov z vzorcem. Z regularnimi izrazi lahko izvajate prilagodljiva in zmogljiva iskanja v veliko večjih iskalnih prostorih, namesto preprostih preverjanj, kot so bila prejšnja.

Python je dobavljen z vgrajenim modulom za regularne izraze, imenovanim re. re modul vsebuje funkcijo, imenovano search(), ki ga lahko uporabimo za ujemanje z vzorcem podniza:

from re import search

fullstring = "StackAbuse"
substring = "tack"

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

Ta metoda je najboljša, če potrebujete bolj zapleteno funkcijo ujemanja, kot je ujemanje brez razlikovanja med velikimi in malimi črkami, ali če imate opravka z velikimi iskalnimi prostori. V nasprotnem primeru se je treba izogibati zapletom in počasnejši hitrosti regularnega izraza za preproste primere uporabe ujemanja podnizov.

O Author

Ta članek je napisal Jacob Stopak, svetovalec in razvijalec programske opreme s strastjo pomagati drugim izboljšati njihova življenja s kodo. Jakob je stvarnik Začetna potrditev – spletno mesto, namenjeno pomoči radovednim razvijalcem, da se naučijo, kako so kodirani njihovi najljubši programi. Njegov predstavljeni projekt pomaga ljudem nauči se Git na ravni kode.

Časovni žig:

Več od Stackabuse