Comment faire une comparaison de chaînes insensible à la casse?
D'après ce que j'ai compris de Google et du lien ci-dessus que les deux fonctions: lower()
et casefold()
convertiront la chaîne en minuscules, mais casefold()
convertira même les lettres sans cas comme le ß
en allemand à ss
.
Tout cela à propos des lettres grecques, mais ma question en général:
Partie 2:
firstString = "der Fluß"
secondString = "der Fluss"
# ß is equivalent to ss
if firstString.casefold() == secondString.casefold():
print('The strings are equal.')
else:
print('The strings are not equal.')
Dans l'exemple ci-dessus, dois-je utiliser:
lower() # the result is not equal which make sense to me
Ou:
casefold() # which ß is ss and result is the
# strings are equal. (since I am a beginner that still does not
# make sense to me. I see different strings).
Casefolding est une version plus agressive de lower()
qui est configurée pour rendre plus comparables plusieurs des caractères Unicode les plus uniques. Il s'agit d'une autre forme de normalisation de texte qui peut initialement sembler très différente, mais elle tient compte des caractères de nombreuses langues différentes.
Je vous suggère de regarder de plus près ce qu'est réellement le pliage, voici donc un bon début: W3 Case Folding Wiki
Pour répondre à vos deux autres questions, si vous travaillez strictement en anglais, lower()
et casefold()
devrait donner exactement les mêmes résultats. Cependant, si vous essayez de normaliser le texte d'autres langues qui utilisent plus que notre simple alphabet à 26 lettres (en utilisant uniquement ASCII), j'utiliserais casefold()
pour comparer vos chaînes, car cela produira des résultats plus cohérents .
Une autre source: Elastic.co Case Folding
Edit: J'ai récemment trouvé un autre très bon réponse liée à une question légèrement différente ici sur SO (faisant une comparaison de chaîne insensible à la casse))