Python 3.3 dodaje metodę casefold
do typu str, ale w wersji 2.x nic nie mam. Jaki jest najlepszy sposób obejścia tego?Jak przypadek składa łańcuch w Pythonie 2?
Odpowiedz
Sprawdź py2casefold.
>>> from py2casefold import casefold
>>> print casefold(u"tschüß")
tschüss
>>> casefold(u"ΣίσυφοςfiÆ") == casefold(u"ΣΊΣΥΦΟσFIæ") == u"σίσυφοσfiæ"
True
[Nie wydaje się być bardzo dobrze przetestowane] (https://github.com/rwarren/py2casefold/blob/39a14b8971040b8f6015b7fa1a401c19c121175f/tests/test_casefold.py) – jfs
J.F. Sebastian - co byś dodał? Dla odniesienia [here] (https://hg.python.org/cpython/file/d4669f43d05f/Lib/test/test_unicode.py#l568) jest zasięg testu jednostkowego "str.casefold" Pythona 3. – Russ
Sprawdź, czy uda Ci się wyłowić przydatny test z ['regex: test_case_folding()'] (https://bitbucket.org/mrabarnett/mrab-regex/src/cbdb3caaee9ec68fdc2bff7e30902fb1dbdd3fd7/regex_3/Python/test_regex.py? at = default & fileviewer = file-view-default # test_regex.py-571) – jfs
Jeśli PyICU jest już zainstalowany; możesz go użyć do zdefiniowania casefold()
. Korzystanie the same example strings as in @Russ' answer:
>>> import icu
>>> casefold = lambda u: unicode(icu.UnicodeString(u).foldCase())
>>> print casefold(u"tschüß")
tschüss
>>> casefold(u"ΣίσυφοςfiÆ") == casefold(u"ΣΊΣΥΦΟσFIæ") == u"σίσυφοσfiæ"
True
>>> icu.UNICODE_VERSION
'6.3'
>>> import unicodedata
>>> unicodedata.unidata_version
'5.2.0'
Czy potrzebujesz do czynienia z ciągów innych niż angielski? – roippi
Tak. Chcę uruchomić algorytm składany w przypadku Unicode. –