HOWTO · Python
Comparaison de chaînes insensibles à la casse en Python
Il existe trois méthodes principales utilisées pour effectuer la comparaison de chaînes insensibles à la casse en python, à savoir lower(), upper() et casefold().
Sur cette page
Pour comparer des chaînes Python sans tenir compte de la casse, normalisez-les avec la même méthode, puis comparez les résultats. Utilisez lower() ou upper() pour les comparaisons simples ; choisissez casefold() lorsque la comparaison sans distinction de casse doit prendre en compte Unicode, par exemple pour considérer ß et ss comme équivalents.
Comparer des chaînes sans tenir compte de la casse avec lower()
La méthode intégrée lower() renvoie une copie d’une chaîne en minuscules. L’appeler sur les deux valeurs avant == permet à des chaînes comme Hello World! et HELLO WORLD! d’être considérées comme égales. Cette méthode effectue une conversion ordinaire de la casse, mais n’applique pas toutes les règles de pliage de casse Unicode. Normalisez les deux opérandes de la même façon : si vous ne transformez qu’un seul côté, une paire qui devrait correspondre peut rester inégale. La méthode renvoie une nouvelle chaîne ; l’orthographe d’origine reste donc disponible pour l’affichage ou le stockage.
Cet exemple autonome compare deux valeurs dont la casse diffère et affiche le résultat booléen.
first = "Hello World!"
second = "HELLO WORLD!"
print(first.lower() == second.lower())
True
Pour les valeurs qui doivent correspondre, la comparaison donne True. Conservez les chaînes d’origine si leur orthographe ou leur casse à l’affichage compte : lower() renvoie une nouvelle chaîne et ne modifie aucune des deux variables.
Comparer des chaînes sans tenir compte de la casse avec upper()
Vous pouvez utiliser de la même manière la méthode intégrée upper(). Elle renvoie une copie en majuscules ; convertissez donc les deux valeurs avec upper() avant de les comparer. C’est une autre possibilité que lower() : appliquez la même méthode de façon cohérente aux deux côtés. L’essentiel est de traiter les deux chaînes avec la même méthode, plutôt que de convertir l’une en minuscules et l’autre en majuscules.
L’exemple compare les mêmes mots après les avoir convertis en majuscules.
first = "Hello World!"
second = "hello world!"
print(first.upper() == second.upper())
True
Ces deux méthodes sont pratiques lorsque les chaînes ne diffèrent que par des variantes ordinaires de casse. Elles ne rendent pas équivalentes toutes les graphies Unicode ; utilisez donc casefold() si la comparaison doit ignorer la casse selon les règles Unicode.
Comparer des chaînes sans tenir compte de la casse avec casefold()
La méthode casefold() est conçue pour comparer des chaînes sans tenir compte de la casse. Elle peut transformer des caractères que la conversion en minuscules de lower() ne modifie pas. Par exemple, lower() laisse la lettre allemande ß inchangée, tandis que casefold() la convertit en ss. Les formes obtenues avec le pliage de casse de "straße" et "STRASSE" sont donc égales. Cette méthode est utile pour comparer du texte Unicode dont les graphies équivalentes ne diffèrent pas seulement par la casse des lettres ASCII.
Lorsque le comportement de pliage de casse Unicode est important, appliquez casefold() aux deux valeurs, puis comparez les chaînes obtenues avec ==. L’exemple exécutable ci-dessous illustre la comparaison de ß et ss.
first = "straße"
second = "STRASSE"
print(first.casefold() == second.casefold())
True
Préférez casefold() pour les comparaisons générales de texte Unicode sans distinction de casse. Pour des textes plus simples, où une conversion ordinaire de la casse suffit, lower() ou upper() exprime clairement l’intention. Ces méthodes normalisent les valeurs pour la comparaison ; elles ne remplacent pas les chaînes d’origine.