python字符串比较不区分大小写_如何进行不区分大小写的字符串比较?

用一种不区分大小写的方式比较字符串似乎是微不足道的事情,但事实并非如此。我将使用Python 3,因为Python 2在这里是不发达的。

首先要注意的是,Unicode中移除大小写的转换并不简单。有一些文本text.lower() != text.upper().lower(),如"ß":"ß".lower()#>>> 'ß'"ß".upper().lower()#>>> 'ss'

但假设你想把"BUSSE"和"Buße"..见鬼,你也许也想比较一下"BUSSE"和"BUẞE"相等-这是较新的大写形式。推荐的方法是使用casefold:help(str.casefold)#>>> Help on method_descriptor:#>>>#>>> casefold(...)#>>>     S.casefold() -> str#>>>

#>>>     Return a version of S suitable for caseless comparisons.#>>>

不要仅仅使用lower..如果casefold不可用,正在执行.upper().lower()帮助(但只是有点)。

那你应该考虑口音。如果您的字体渲染器是好的,您可能会认为"ê" == "ê"-但它没有:"ê" == "ê"#>>> False

这是因为他们实际上import unicodedata[unicodedata.name(char) for char in "ê"]#>>> ['LATIN SMALL LETTER E WITH CIRCUMFLEX'][unicodedata.name(char) for char in "ê"]

#>>> ['LATIN SMALL LETTER E', 'COMBINING CIRCUMFLEX ACCENT']

处理这个问题最简单的方法是unicodedata.normalize..你可能想用NFKD规范化,但可以随意查看文档。那么一个人就会unicodedata.normalize("NFKD", "ê") == unicodedata.normalize("NFKD", "ê")#>>> True

最后,这里用函数表示了这一点:import unicodedatadef normalize_caseless(text):

return unicodedata.normalize("NFKD", text.casefold())def caseless_equal(left, right):

return normalize_caseless(left) == normalize_caseless(right)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值