Python: controleer of String een substring bevat

Door te controleren of een string een substring bevat, kunnen conditionele regels worden gegeneraliseerd en flexibelere code worden gemaakt. Bovendien kunt u, afhankelijk van uw domeinmodel, door te controleren of een string een substring bevat, ook velden van een object afleiden als een string op zichzelf een veld codeert.

In deze handleiding gaan we er eens naar kijken hoe je kunt controleren of een string een substring bevat in Python.

De in Operator

De eenvoudigste manier om te controleren of een Python-string een substring bevat, is door de in operator.

De in operator wordt gebruikt om datastructuren te controleren op lidmaatschap van Python. Het retourneert een Booleaanse waarde (ofwel True or False). Om te controleren of een string een substring bevat in Python met behulp van de in operator, we roepen het eenvoudigweg aan op de superstring:

fullstring = "StackAbuse"
substring = "tack"

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

Deze operator is een afkorting voor het aanroepen van een object __contains__ methode, en werkt ook goed om te controleren of een item in een lijst voorkomt. Het is vermeldenswaard dat dit zo is niet nulveilig, dus als onze fullstring naar wees None, zou er een uitzondering worden gegenereerd:

TypeError: argument of type 'NoneType' is not iterable

Om dit te voorkomen, moet je eerst controleren of het verwijst naar None of niet:

fullstring = None
substring = "tack"

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

De Tekenreeks.index() Methode

Het String-type in Python heeft een methode genaamd index() die kan worden gebruikt om de startindex te vinden van de eerste keer dat een substring in een string voorkomt.

Als de subtekenreeks niet wordt gevonden, wordt a ValueError Er wordt een uitzondering gegenereerd, die kan worden afgehandeld met een try-except-else-blok:

fullstring = "StackAbuse"
substring = "tack"

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

Deze methode is handig als u ook de positie van de subtekenreeks wilt weten, in plaats van alleen het bestaan โ€‹โ€‹ervan binnen de volledige tekenreeks. De methode zelf retourneert de index:

print(fullstring.index(substring))

Om te controleren of een string een substring bevat, is dit echter een uitgebreide benadering.

De String.find()-methode

De klasse String heeft een andere methode genaamd find() wat handiger in gebruik is dan index(), vooral omdat we ons geen zorgen hoeven te maken over het omgaan met uitzonderingen.

If find() vindt geen overeenkomst, retourneert -1, anders retourneert het de meest linkse index van de subtekenreeks in de grotere tekenreeks:

Bekijk onze praktische, praktische gids voor het leren van Git, met best-practices, door de industrie geaccepteerde normen en bijgevoegd spiekbriefje. Stop met Googlen op Git-commando's en eigenlijk leren het!

fullstring = "StackAbuse"
substring = "tack"

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

Uiteraard voert het dezelfde zoekopdracht uit als index() en retourneert de index van het begin van de subtekenreeks binnen de bovenliggende tekenreeks:

print(fullstring.find(substring))

Reguliere expressies (RegEx)

Reguliere expressies bieden een flexibelere (zij het complexere) manier om tekenreeksen te controleren op patroonovereenkomst. Met reguliere expressies kunt u flexibele en krachtige zoekopdrachten uitvoeren via veel grotere zoekruimten, in plaats van eenvoudige controles, zoals voorheen.

Python wordt geleverd met een ingebouwde module voor reguliere expressies, genaamd re. De re module bevat een functie genaamd search(), die we kunnen gebruiken om een โ€‹โ€‹substringpatroon te matchen:

from re import search

fullstring = "StackAbuse"
substring = "tack"

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

Deze methode is het beste als u een complexere zoekfunctie nodig heeft, zoals hoofdletterongevoelige overeenkomsten, of als u te maken heeft met grote zoekruimten. Anders moeten de complicatie en lagere snelheid van regex worden vermeden voor eenvoudige gebruiksscenario's voor het matchen van substrings.

Over de auteur

Dit artikel is geschreven door Jacob Stopak, een softwareconsultant en -ontwikkelaar met een passie voor het helpen van anderen om hun leven te verbeteren door middel van code. Jacob is de schepper van Initiรซle verplichting โ€“ een site die nieuwsgierige ontwikkelaars helpt te leren hoe hun favoriete programma's worden gecodeerd. Het aanbevolen project helpt mensen leer Git op codeniveau.

Tijdstempel:

Meer van Stapelmisbruik