【问题标题】:Unicode case conversionUnicode 大小写转换
【发布时间】:2010-08-21 04:42:28
【问题描述】:

我得到一个字符或一个字符串,并且正在使用 Python。

根据 Unicode 提出的标准(标准和特殊大小写映射),我如何确定特定字符是否具有等效的小写字母?

根据 Unicode 提出的标准(标准和特殊情况映射),我如何确定一个字符串是否包含一个或多个具有等效小写字母的字符?

【问题讨论】:

    标签: python unicode case-sensitive


    【解决方案1】:
    def haslower(unicodechar):
        return unicodechar != unicodechar.lower()
    
    def anylower(unicodestring):
        return any(haslower(c) for c in unicodestring)
    

    当然,这只能在您使用的 Python 版本按照 unicode 标准正确实现 .lower() 方法的情况下才能正常工作。另外,我假设您不考虑,例如,u'a',“有一个小写等价物”(它当然有一个大写)。如果您的意思不同,请考虑

    def changescase(uc):
        return uc != uc.lower() or uc != uc.upper()
    

    (我已将参数重命名为 uc 以避免行长过长;-) -- 如果这是您想要的,我建议 不要 将函数命名为“小写等效”为这肯定会让您的代码的读者/维护者感到困惑!-)

    【讨论】:

    • 我从未想过 .lower(和 .upper)也适用于重音字符。
    • 谢谢。我在 GAE 中运行我的应用程序,所以它是 Python 2.5.2。我问了另一个问题,以防您想回答(让其他人也看到)。 stackoverflow.com/questions/3536397/…
    【解决方案2】:

    @Albert,当您还没有理清(也没有向回答者解释)您真正想做的事情时,您似乎过度关注大小写转换的细节。

    === 你之前的解释尝试(评论我对this question 的回答)===

    @John:嗯,我实际上是在为我的 Web 服务制作一个 API。我的网络服务接受映射到我的数据库中特定记录的键。密钥区分大小写,密钥可以由任何 unicode 字符组成。因此,为了规范所有输入,我会将所有关键查询转换为小写(如果它们具有大写等效项)。这样做的结果是,当我创建记录键(我的用户可以自定义)时,我不能接受任何可以通过 toLower() 函数转换为等效小写字母的大写字符。所以我试图为此做一个过滤器。有什么建议吗?

    === 和我的回复评论 ===

    @Albert:如果您的密钥区分大小写,您为什么要对它们进行规范化??? “用户可以自定义的记录键”是什么意思??? “任何 unicode 字符”与“不能接受任何大写字符”??? 从字面上回答你的问题:看起来你不能接受字符 c when c.lower() != c 这意味着你不能接受任何键 if key.lower() != key。 我认为您应该开始一个新问题,并通过示例准确地解释您要做什么。

    ...您当然已经提出了一个新问题(实际上是其中 2 个),但您没有解释任何内容。这个“新”问题是如此新,以至于@Alex Martelli 的回答与我上面突出显示的评论基本相同。

    我认为您应该开始一个新问题,使用新内容,通过示例准确解释您要做什么。

    【讨论】:

    • 好的。我会把我真正想做的事情放在一起。谢谢!
    猜你喜欢
    • 2019-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 2011-07-21
    • 2011-10-29
    相关资源
    最近更新 更多