Skip to content

Comparaison de chaînes de caractères en Python (correspondance exacte/partielle, etc.)

Cet article décrit les comparaisons de chaînes en Python.

  • Correspondance exacte (comparaison d’égalité) :==, !=
  • Correspondance partielle :in, not in
  • Match avant/arrière :startswith(), endswith()
  • Comparaison des commandes :<, <=, >, >=
  • Comparaison insensible à la casse :upper(), lower()
  • Expression régulière :re.search(), re.fullmatch()

Correspondance exacte (comparaison d’égalité) :==, !=

Comme pour les nombres, l’opérateur == détermine si deux chaînes sont égales. S’ils sont égaux, True est renvoyé ; si ce n’est pas le cas, False est renvoyé.

print('abc' == 'abc')
# True

print('abc' == 'xyz')
# False

Il est sensible à la casse, et il en va de même pour les comparaisons par d’autres opérateurs et méthodes. Les comparaisons insensibles à la casse sont décrites plus loin.

print('abc' == 'ABC')
# False

!= renvoie True s’ils ne sont pas égaux et False s’ils sont égaux.

print('abc' != 'xyz')
# True

print('abc' != 'abc')
# False

Correspondance partielle :in, not in

Utilisez l’opérateur in pour les correspondances partielles, c’est-à-dire si une chaîne contient l’autre chaîne.

x dans y renvoie True si x est contenu dans y (x est une sous-chaîne de y) et False si ce n’est pas le cas. Si chaque caractère de x est contenu dans y de manière discrète, False est renvoyé.

print('bbb' in 'aaa-bbb-ccc')
# True

print('xxx' in 'aaa-bbb-ccc')
# False

print('abc' in 'aaa-bbb-ccc')
# False

not in renvoie True s’il n’est pas inclus, False s’il est inclus.

print('xxx' not in 'aaa-bbb-ccc')
# True

print('bbb' not in 'aaa-bbb-ccc')
# False

in et not in sont également utilisés pour vérifier l’existence d’éléments dans une liste. Voir l’article suivant pour plus de détails.

Match avant/arrière :startswith(), endswith()

Utilisez la méthode de chaîne startswith() pour la correspondance directe, c’est-à-dire si une chaîne commence par la chaîne spécifiée.

s = 'aaa-bbb-ccc'

print(s.startswith('aaa'))
# True

print(s.startswith('bbb'))
# False

Vous pouvez également spécifier un tuple de chaînes.

True est renvoyé si la chaîne commence par l’un des éléments du tuple, et False est renvoyé si la chaîne ne commence par aucun d’entre eux. Notez qu’une erreur est générée si vous spécifiez une liste au lieu d’un tuple.

print(s.startswith(('aaa', 'bbb', 'ccc')))
# True

print(s.startswith(('xxx', 'yyy', 'zzz')))
# False

# print(s.startswith(['a', 'b', 'c']))
# TypeError: startswith first arg must be str or a tuple of str, not list

Utilisez la méthode de chaîne endswith() pour la correspondance inverse, c’est-à-dire si une chaîne se termine par la chaîne spécifiée. Son utilisation est la même que startswith().

print(s.endswith('ccc'))
# True

print(s.endswith('bbb'))
# False

print(s.endswith(('aaa', 'bbb', 'ccc')))
# True

Comparaison des commandes :<, <=, >, >=

Vous pouvez comparer des chaînes avec les opérateurs <, <=, > et >= ainsi que des nombres. Les chaînes sont comparées dans l’ordre lexical.

print('a' < 'b')
# True

print('aa' < 'ab')
# True

print('abc' < 'abcd')
# True

L’ordre des caractères est comparé en points de code Unicode.

Vous pouvez obtenir le point de code Unicode d’un caractère avec la fonction intégrée ord().

print(ord('a'))
# 97

print(ord('b'))
# 98

Les lettres majuscules ont des points de code plus petits que les lettres minuscules.

print('Z' < 'a')
# True

print(ord('Z'))
# 90

Lorsqu’une liste de chaînes est triée avec la méthode de liste sort() ou la fonction intégrée sorted(), l’ordre est également déterminé en fonction des points de code Unicode.

print(sorted(['aaa', 'abc', 'Abc', 'ABC']))
# ['ABC', 'Abc', 'aaa', 'abc']

Comparaison insensible à la casse :upper(), lower()

Tous les opérateurs et méthodes décrits jusqu’ici sont sensibles à la casse.

Si vous avez besoin d’une comparaison insensible à la casse, vous pouvez utiliser upper() ou lower() pour convertir les deux chaînes en majuscules ou en minuscules.

s1 = 'abc'
s2 = 'ABC'

print(s1 == s2)
# False

print(s1.lower() == s2.lower())
# True

Expression régulière :re.search(), re.fullmatch()

Vous pouvez utiliser des expressions régulières pour des comparaisons plus flexibles.

rechercher()

Utilisez re.search() pour une correspondance partielle, avant et arrière. Notez que re.match() peut également être utilisé pour la correspondance directe, mais cela n’est pas abordé ici.

Divers métacaractères (caractères spéciaux) peuvent être utilisés pour les modèles d’expressions régulières, mais il est également possible de spécifier simplement une chaîne telle quelle. Un objet match est renvoyé si la chaîne est incluse, et None si ce n’est pas le cas. Les objets match sont toujours évalués comme True.

import re

s = 'aaa-AAA-123'

print(re.search('aaa', s))
# 

print(re.search('xxx', s))
# None

Le métacaractère ^ correspond au début de la chaîne et $ correspond à la fin de la chaîne.

print(re.search('^aaa', s))
# 

print(re.search('^123', s))
# None

print(re.search('aaa$', s))
# None

print(re.search('123$', s))
# 

En outre, une variété d’autres métacaractères et séquences spéciales sont disponibles.

Par exemple, [AZ] représente n’importe quelle lettre de l’alphabet majuscule, et + signifie que le motif précédent est répété une ou plusieurs fois. Ainsi, [AZ]+ correspond à toute sous-chaîne composée d’un ou plusieurs caractères alphabétiques majuscules consécutifs.

print(re.search('[A-Z]+', s))
# 

Veuillez consulter l’article suivant pour des exemples de base de modèles d’expressions régulières, tels que le modèle de type caractère générique.

re.fullmatch()

Utilisez re.fullmatch() pour vérifier si la chaîne entière correspond ou non à un modèle d’expression régulière. Même si certaines parties correspondent, None est renvoyé si certaines parties ne correspondent pas.

s = '012-3456-7890'

print(re.fullmatch(r'd{3}-d{4}-d{4}', s))
# 

s = 'tel: 012-3456-7890'

print(re.fullmatch(r'd{3}-d{4}-d{4}', s))
# None

d représente un nombre et {n} représente n répétitions. Étant donné que la barre oblique inverse est utilisée dans des séquences spéciales d’expressions régulières, telles que d, il est utile d’utiliser des chaînes brutes (r » ou r » ») qui traitent les barres obliques inverses comme des caractères littéraux.

re.fullmatch() a été ajouté dans Python 3.4. Dans les versions antérieures, vous pouvez utiliser re.search() avec ^ et $ pour faire de même. Vous pouvez également utiliser re.match() et $, bien que cela ne soit pas affiché ici.

s = '012-3456-7890'

print(re.search(r'^d{3}-d{4}-d{4}$', s))
# 

s = 'tel: 012-3456-7890'

print(re.search('^d{3}-d{4}-d{4}$', s))
# None

re.IGNORECASE

En spécifiant re.IGNORECASE comme indicateurs d’argument de fonctions telles que re.search() et re.fullmatch(), une comparaison insensible à la casse est possible.

s = 'ABC'

print(re.search('abc', s))
# None

print(re.search('abc', s, re.IGNORECASE))
#