Python: Kontrollera om strängen innehåller delsträng

Att kontrollera om en sträng innehåller en delsträng hjälper till att generalisera villkor och skapa mer flexibel kod. Dessutom, beroende på din domänmodell – kan du kontrollera om en sträng innehåller en delsträng också göra det möjligt för dig att härleda fält för ett objekt, om en sträng kodar ett fält i sig själv.

I den här guiden tar vi en titt på hur man kontrollerar om en sträng innehåller en delsträng i Python.

Smakämnen in Operatör

Det enklaste sättet att kontrollera om en Python-sträng innehåller en delsträng är att använda in operatör.

Smakämnen in operator används för att kontrollera datastrukturer för medlemskap i Python. Det returnerar en boolesk (antingen True or False). För att kontrollera om en sträng innehåller en delsträng i Python med hjälp av in operatorn, vi anropar den helt enkelt på supersträngen:

fullstring = "StackAbuse"
substring = "tack"

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

Denna operatör är en förkortning för att anropa ett objekts __contains__ metod och fungerar även bra för att kontrollera om ett objekt finns i en lista. Det är värt att notera att det är inte null-säker, så om vår fullstring pekade på None, ett undantag skulle kastas:

TypeError: argument of type 'NoneType' is not iterable

För att undvika detta bör du först kontrollera om det pekar på None eller inte:

fullstring = None
substring = "tack"

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

Smakämnen String.index() Metod

String-typen i Python har en metod som kallas index() som kan användas för att hitta startindexet för den första förekomsten av en delsträng i en sträng.

Om delsträngen inte hittas, a ValueError undantag kastas, vilket kan hanteras med ett try-except-else-block:

fullstring = "StackAbuse"
substring = "tack"

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

Den här metoden är användbar om du också behöver veta positionen för delsträngen, i motsats till bara dess existens inom hela strängen. Metoden själv returnerar indexet:

print(fullstring.index(substring))

Men – för att kontrollera om en sträng innehåller en delsträng, är detta ett utförligt tillvägagångssätt.

String.find()-metoden

Klassen String har en annan metod som kallas find() vilket är bekvämare att använda än index(), främst för att vi inte behöver oroa oss för att hantera några undantag.

If find() inte hittar en matchning, returnerar den -1, annars returnerar den indexet längst till vänster för delsträngen i den större strängen:

Kolla in vår praktiska, praktiska guide för att lära dig Git, med bästa praxis, branschaccepterade standarder och medföljande fuskblad. Sluta googla Git-kommandon och faktiskt lära Det!

fullstring = "StackAbuse"
substring = "tack"

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

Naturligtvis utför den samma sökning som index() och returnerar indexet för början av delsträngen inom den överordnade strängen:

print(fullstring.find(substring))

Reguljära uttryck (RegEx)

Reguljära uttryck ger ett mer flexibelt (om än mer komplext) sätt att kontrollera strängar för mönstermatchning. Med Regular Expressions kan du utföra flexibla och kraftfulla sökningar genom mycket större sökutrymmen, snarare än enkla kontroller, som tidigare.

Python levereras med en inbyggd modul för reguljära uttryck, kallad re. De re modulen innehåller en funktion som kallas search(), som vi kan använda för att matcha ett delsträngsmönster:

from re import search

fullstring = "StackAbuse"
substring = "tack"

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

Den här metoden är bäst om du behöver en mer komplex matchningsfunktion, som skiftlägesokänslig matchning, eller om du har att göra med stora sökutrymmen. Annars bör komplikationen och den långsammare hastigheten för regex undvikas för enkla delsträngsmatchande användningsfall.

Om författaren

Den här artikeln skrevs av Jacob Stopak, en mjukvarukonsult och utvecklare med passion för att hjälpa andra att förbättra sina liv genom kod. Jacob är skaparen av Inledande åtagande – en webbplats dedikerad till att hjälpa nyfikna utvecklare att lära sig hur deras favoritprogram är kodade. Dess utvalda projekt hjälper människor lär dig Git på kodnivå.

Tidsstämpel:

Mer från Stackabuse