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

小编典典

不区分大小写的方式比较字符串似乎很简单,但事实并非如此。我将使用Python 3,因为Python 2在这里尚未开发。

首先要注意的是,用Unicode删除大小写的转换并非易事。其中有一些文字text.lower() != text.upper().lower(),例如"ß":

"ß".lower()

#>>> 'ß'

"ß".upper().lower()

#>>> 'ss'

但是,假设你想无休止地比较”BUSSE”和”Buße”。哎呀,你可能还想比较”BUSSE”和”BUẞE”相等-这是较新的资本形式。推荐的方法是使用casefold:

海峡 折叠()

返回字符串的casefolded副本。大小写折叠的字符串可用于无大小写的匹配。

大小写折叠类似于小写字母,但是更具攻击性,因为它旨在删除字符串中的所有大小写区别。[...]

不要只是使用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 unicodedata

def normalize_caseless(text):

return unicodedata.normalize("NFKD", text.casefold())

def caseless_equal(left, right):

return normalize_caseless(left) == normalize_caseless(right)

2020-02-10

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值