Python: kontrollige, kas string sisaldab alamstringi

Kontrollimine, kas string sisaldab alamstringi, aitab üldistada tingimustingimusi ja luua paindlikumat koodi. Lisaks, olenevalt teie domeenimudelist, võib stringi alamstringi sisaldamise kontrollimine võimaldada teil järeldada ka objekti välju, kui string kodeerib välja iseenesest.

Selles juhendis vaatleme kuidas kontrollida, kas string sisaldab alamstringi Pythonis.

. in operaator

Lihtsaim viis kontrollida, kas Pythoni string sisaldab alamstringi, on kasutada in operaator.

. in operaatorit kasutatakse Pythoni liikmesuse andmestruktuuride kontrollimiseks. See tagastab Boole'i ​​(kas True or False). Et kontrollida, kas string sisaldab Pythonis alamstringi, kasutades in operaator, kutsume seda lihtsalt superstringis:

fullstring = "StackAbuse"
substring = "tack"

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

See operaator on stenogramm objekti kutsumiseks __contains__ meetodit ja sobib hästi ka loendis üksuse olemasolu kontrollimiseks. Väärib märkimist, et see on ei ole null-turvaline, nii et kui meie fullstring osutas None, tehakse erand:

TypeError: argument of type 'NoneType' is not iterable

Selle vältimiseks peaksite esmalt kontrollima, kas see viitab None või mitte:

fullstring = None
substring = "tack"

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

. String.index() Meetod

Pythoni stringitüübil on meetod nimega index() mida saab kasutada stringi alamstringi esmakordse esinemise algusindeksi leidmiseks.

Kui alamstringi ei leita, a ValueError visatakse erand, mida saab käsitleda try-except-else plokiga:

fullstring = "StackAbuse"
substring = "tack"

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

See meetod on kasulik, kui peate teadma ka alamstringi asukohta, mitte ainult selle olemasolu kogu stringis. Meetod ise tagastab indeksi:

print(fullstring.index(substring))

Kuid selleks, et kontrollida, kas string sisaldab alamstringi, on see üksikasjalik lähenemine.

String.find() meetod

Klassil String on veel üks meetod, mida nimetatakse find() mida on mugavam kasutada kui index(), peamiselt seetõttu, et me ei pea muretsema erandite käsitlemise pärast.

If find() ei leia vastet, tagastab -1, vastasel juhul tagastab suuremas stringis oleva alamstringi vasakpoolseima indeksi:

Tutvuge meie praktilise ja praktilise Giti õppimise juhendiga, mis sisaldab parimaid tavasid, tööstusharus aktsepteeritud standardeid ja kaasas olevat petulehte. Lõpetage Giti käskude guugeldamine ja tegelikult õppima seda!

fullstring = "StackAbuse"
substring = "tack"

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

Loomulikult teostab see sama otsingu kui index() ja tagastab emastringi alamstringi alguse indeksi:

print(fullstring.find(substring))

Regulaaravaldised (RegEx)

Regulaaravaldised pakuvad paindlikumat (kuigi keerukamat) viisi stringide mustri sobivuse kontrollimiseks. Regulaaravaldiste abil saate teha paindlikke ja võimsaid otsinguid palju suuremate otsinguruumide kaudu, mitte lihtsaid kontrolle, nagu eelmised.

Python on varustatud sisseehitatud regulaaravaldiste mooduliga, nn re. re moodul sisaldab funktsiooni nimega search(), mida saame kasutada alamstringi mustri sobitamiseks:

from re import search

fullstring = "StackAbuse"
substring = "tack"

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

See meetod on parim, kui vajate keerukamat sobitamisfunktsiooni, näiteks tõstutundlikku sobitamist, või kui tegemist on suurte otsinguruumidega. Vastasel juhul tuleks lihtsate alamstringi sobitamise kasutusjuhtude puhul vältida regexi keerukust ja aeglasemat kiirust.

Teave Autor

Selle artikli kirjutas Jacob Stopak, tarkvarakonsultant ja arendaja, kelle kirg on aidata teistel koodi abil oma elu paremaks muuta. Jacob on looja Esialgne sidumine – sait, mis aitab uudishimulikel arendajatel õppida, kuidas nende lemmikprogramme kodeeritakse. Selle esiletõstetud projekt aitab inimesi õppige Git koodi tasemel.

Ajatempel:

Veel alates Stackabus