【问题标题】:How do I case fold a string in Python 2?如何在 Python 2 中对字符串进行大小写折叠?
【发布时间】:2013-08-18 17:28:21
【问题描述】:

Python 3.3 将 casefold 方法添加到 str 类型,但在 2.x 中我什么都没有。解决此问题的最佳方法是什么?

【问题讨论】:

  • 你需要处理非英文字符串吗?
  • 是的。我想运行 unicode 大小写折叠算法。

标签: python unicode python-2.x


【解决方案1】:

查看py2casefold

>>> from py2casefold import casefold
>>> print casefold(u"tschüß")
tschüss
>>> casefold(u"ΣίσυφοςfiÆ") == casefold(u"ΣΊΣΥΦΟσFIæ") == u"σίσυφοσfiæ"
True

【讨论】:

  • J.F.塞巴斯蒂安——你会补充什么?作为参考,here 是 python 3 的str.casefold 单元测试的范围。
  • 看看你能不能从regex:test_case_folding()找到一个有用的测试
  • J.F.塞巴斯蒂安——感谢你的链接,但我在那个正则表达式测试中看不到太多有用的东西(在那里有一两条评论会很好!)。即便如此,我对苗条的单元测试也不是很满意,所以我稍微加强了一点。不过,折叠外壳的操作真的没有太多。 可以测试的并不多。
  • 我不敢相信 Unicode 中的某些东西是简单的,例如,您确定在不同版本的 Unicode 标准之间没有改变大小写折叠属性吗——我是否希望大小写折叠在不同 Python 之间的工作方式相同? 2个版本?阅读what @tchrist says on the related topic
【解决方案2】:

有一个帖子here涵盖了一些问题(但可能无法解决所有问题),您可以判断它是否适合您的需要。如果这样做不好,那么在 W3C 站点 here 上提供一些有用的案例折叠技巧。

【讨论】:

    【解决方案3】:

    如果PyICU已经安装;你可以用它来定义casefold()。使用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'
    

    The result may depend on the version of Unicode standard.

    【讨论】:

      猜你喜欢
      • 2014-07-08
      • 1970-01-01
      • 2010-10-11
      • 2019-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多