Python: Tjek om strengen indeholder understreng

At kontrollere, om en streng indeholder en understreng, hjælper med at generalisere betingelser og skabe mere fleksibel kode. Derudover, afhængigt af din domænemodel – kan kontrol af, om en streng indeholder en understreng, også give dig mulighed for at udlede felter af et objekt, hvis en streng koder et felt i sig selv.

I denne guide tager vi et kig på hvordan man kontrollerer, om en streng indeholder en understreng i Python.

in Operatør

Den nemmeste måde at kontrollere, om en Python-streng indeholder en understreng, er at bruge in operatør.

in operator bruges til at kontrollere datastrukturer for medlemskab i Python. Det returnerer en boolesk (enten True or False). For at kontrollere, om en streng indeholder en understreng i Python ved hjælp af in operatør, kalder vi den simpelthen på superstrengen:

fullstring = "StackAbuse"
substring = "tack"

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

Denne operator er en forkortelse for at kalde et objekts __contains__ metode, og fungerer også godt til at kontrollere, om et element findes på en liste. Det er værd at bemærke, at det er ikke null-safe, så hvis vores fullstring pegede på None, ville der blive kastet en undtagelse:

TypeError: argument of type 'NoneType' is not iterable

For at undgå dette skal du først tjekke, om det peger på None eller ikke:

fullstring = None
substring = "tack"

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

String.index() Metode

String-typen i Python har en metode kaldet index() der kan bruges til at finde startindekset for den første forekomst af en understreng i en streng.

Hvis understrengen ikke findes, a ValueError undtagelse er kastet, som kan håndteres med en try-except-else-blok:

fullstring = "StackAbuse"
substring = "tack"

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

Denne metode er nyttig, hvis du også har brug for at kende understrengens position, i modsætning til blot dens eksistens i den fulde streng. Selve metoden returnerer indekset:

print(fullstring.index(substring))

Men - for at kontrollere, om en streng indeholder en understreng, er dette en udførlig tilgang.

String.find()-metoden

String-klassen har en anden metode kaldet find() som er mere praktisk at bruge end index(), primært fordi vi ikke behøver at bekymre os om at håndtere eventuelle undtagelser.

If find() ikke finder et match, returnerer det -1, ellers returnerer det indekset længst til venstre for understrengen i den større streng:

Tjek vores praktiske, praktiske guide til at lære Git, med bedste praksis, brancheaccepterede standarder og inkluderet snydeark. Stop med at google Git-kommandoer og faktisk lærer det!

fullstring = "StackAbuse"
substring = "tack"

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

Naturligvis udfører den samme søgning som index() og returnerer indekset for starten af ​​understrengen i den overordnede streng:

print(fullstring.find(substring))

Regulære udtryk (RegEx)

Regulære udtryk giver en mere fleksibel (omend mere kompleks) måde at kontrollere strenge for mønstertilpasning. Med Regular Expressions kan du udføre fleksible og kraftfulde søgninger gennem meget større søgerum i stedet for simple kontroller, som tidligere.

Python leveres med et indbygget modul til regulære udtryk, kaldet re. Det re modul indeholder en funktion kaldet search(), som vi kan bruge til at matche et understrengmønster:

from re import search

fullstring = "StackAbuse"
substring = "tack"

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

Denne metode er bedst, hvis du har brug for en mere kompleks matchningsfunktion, f.eks. matchning uden store og små bogstaver, eller hvis du har at gøre med store søgerum. Ellers bør komplikationen og den langsommere hastighed af regex undgås for simple substring-matchende use-cases.

Om forfatteren

Denne artikel er skrevet af Jacob Stopak, en softwarekonsulent og udvikler med passion for at hjælpe andre med at forbedre deres liv gennem kode. Jacob er skaberen af Indledende forpligtelse – et websted dedikeret til at hjælpe nysgerrige udviklere med at lære, hvordan deres yndlingsprogrammer er kodet. Dets fremhævede projekt hjælper folk lær Git på kodeniveau.

Tidsstempel:

Mere fra Stablemisbrug