web-dev-qa-db-ja.com

Python:文字列のマッチングと小文字への変換におけるlower()とcasefold()

大文字と小文字を区別しない文字列比較を行うにはどうすればよいですか?

Googleと上記のリンクから理解したことから、両方の関数:lower()casefold()は文字列を小文字に変換しますが、casefold()は大文字と小文字を変換しますssへのドイツ語の_ß_など。

ギリシャ文字についてのすべてですが、一般的に私の質問:

  • 他に違いはありますか?
  • 小文字に変換する方が良いですか?
  • 一致する文字列を確認する方が良いですか?

パート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.')
_

上記の例では、次を使用する必要があります。

lower() # the result is not equal which make sense to me

または:

_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

ケースフォールディングは、lower()のより積極的なバージョンであり、よりユニークなUnicode文字の多くを比較可能にするために設定されています。これは、最初は非常に異なるように見えるテキストを正規化する別の形式ですが、多くの異なる言語の文字を考慮に入れます。

ケースの折りたたみが実際にどのようなものかを詳しく調べることをお勧めします。そのための良いスタートです。 W3 Case Folding Wiki

他の2つの質問に答えるために、英語で厳密に作業している場合、lower()casefold()はまったく同じ結果をもたらすはずです。ただし、単純な26文字以上のアルファベット(ASCIIのみを使用)を使用する他の言語のテキストを正規化する場合は、casefold()を使用して文字列を比較します。 。

別のソース: Elastic.co Case Folding

編集:私は最近、別の非常に良いものを見つけました わずかに異なる質問への関連する答え ここでSO(大文字と小文字を区別しない文字列比較を行う)

20
David Culbreth