Python : Vérifiez si la chaîne contient une sous-chaîne

Vérifier si une chaîne contient une sous-chaîne permet de généraliser les conditions et de créer un code plus flexible. De plus, selon votre modèle de domaine, vérifier si une chaîne contient une sous-chaîne peut également vous permettre de déduire les champs d'un objet, si une chaîne code un champ en elle-même.

Dans ce guide, nous examinerons comment vérifier si une chaîne contient une sous-chaîne en Python.

La in Opérateur

Le moyen le plus simple de vérifier si une chaîne Python contient une sous-chaîne est d'utiliser le in opérateur.

La in L’opérateur est utilisé pour vérifier l’appartenance des structures de données à Python. Il renvoie un booléen (soit True or False). Pour vérifier si une chaîne contient une sous-chaîne en Python en utilisant le in opérateur, nous l'invoquons simplement sur la superstring :

fullstring = "StackAbuse"
substring = "tack"

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

Cet opérateur est un raccourci pour appeler le nom d'un objet __contains__ méthode, et fonctionne également bien pour vérifier si un élément existe dans une liste. Il convient de noter que c'est pas de sécurité nulle, donc si notre fullstring pointait du doigt None, une exception serait levée :

TypeError: argument of type 'NoneType' is not iterable

Pour éviter cela, vous devez d'abord vérifier s'il pointe vers None ou pas:

fullstring = None
substring = "tack"

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

La String.index() Method

Le type String en Python a une méthode appelée index() qui peut être utilisé pour trouver l'index de départ de la première occurrence d'une sous-chaîne dans une chaîne.

Si la sous-chaîne n'est pas trouvée, un ValueError une exception est levée, qui peut être gérée avec un bloc try-sauf-else :

fullstring = "StackAbuse"
substring = "tack"

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

Cette méthode est utile si vous avez également besoin de connaître la position de la sous-chaîne, par opposition à simplement son existence dans la chaîne complète. La méthode elle-même renvoie l'index :

print(fullstring.index(substring))

Cependant, dans le but de vérifier si une chaîne contient une sous-chaîne, il s'agit d'une approche verbeuse.

La méthode String.find()

La classe String a une autre méthode appelée find() ce qui est plus pratique à utiliser que index(), principalement parce que nous n'avons pas à nous soucier de la gestion des exceptions.

If find() ne trouve pas de correspondance, il renvoie -1, sinon il renvoie l'index le plus à gauche de la sous-chaîne dans la plus grande chaîne :

Consultez notre guide pratique et pratique pour apprendre Git, avec les meilleures pratiques, les normes acceptées par l'industrie et la feuille de triche incluse. Arrêtez de googler les commandes Git et en fait apprendre il!

fullstring = "StackAbuse"
substring = "tack"

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

Naturellement, il effectue la même recherche que index() et renvoie l'index du début de la sous-chaîne dans la chaîne parent :

print(fullstring.find(substring))

Expressions régulières (RegEx)

Les expressions régulières offrent un moyen plus flexible (quoique plus complexe) de vérifier les chaînes pour la correspondance de modèles. Avec les expressions régulières, vous pouvez effectuer des recherches flexibles et puissantes dans des espaces de recherche beaucoup plus grands, plutôt que de simples vérifications, comme les précédentes.

Python est livré avec un module intégré pour les expressions régulières, appelé reL’ re le module contient une fonction appelée search(), que nous pouvons utiliser pour faire correspondre un modèle de sous-chaîne :

from re import search

fullstring = "StackAbuse"
substring = "tack"

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

Cette méthode est la meilleure si vous avez besoin d'une fonction de correspondance plus complexe, comme une correspondance insensible à la casse, ou si vous avez affaire à de grands espaces de recherche. Sinon, la complication et la vitesse plus lente de l'expression régulière doivent être évitées pour les cas d'utilisation simples de correspondance de sous-chaînes.

À propos de l’auteur

Cet article a été rédigé par Jacob Stopak, consultant et développeur de logiciels passionné par le fait d'aider les autres à améliorer leur vie grâce au code. Jacob est le créateur de Engagement initial – un site dédié à aider les développeurs curieux à apprendre comment sont codés leurs programmes préférés. Son projet vedette aide les gens apprendre Git au niveau du code.

Horodatage:

Plus de Stackabuse