web-dev-qa-db-fra.com

Python: inférieur () vs casefold () dans la correspondance des chaînes et la conversion en minuscules

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:

  • y a-t-il d'autres différences?
  • lequel est préférable de convertir en minuscules?
  • lequel est préférable de vérifier les chaînes correspondantes?

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).
14
user8454691

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))

20
David Culbreth