比较2个字符串而不考虑Python中的重音

时间:2013-12-22 13:14:33

标签: python string

如果字符串相同,我想比较2个字符串并且True,而不考虑重音。

示例:我想要以下代码来打印'Bonjour'

if 'séquoia' in 'Mon sequoia est vert':
    print 'Bonjour'

3 个答案:

答案 0 :(得分:5)

你应该看看Unidecode。使用模块和此方法,您可以获得没有重音的字符串,然后进行比较:

def remove_accents(data):
    return ''.join(x for x in unicodedata.normalize('NFKD', data) if x in string.ascii_letters).lower()


if remove_accents('séquoia') in 'Mon sequoia est vert':
    # Do something
    pass

Reference from stackoverflow

答案 1 :(得分:5)

您应该使用Unidecode包中的unidecode功能:

from unidecode import unidecode

if unidecode(u'séquoia') in 'Mon sequoia est vert':
    print 'Bonjour'

答案 2 :(得分:0)

对不起,晚会!

如何做呢?

>>> unicodedata.normalize('NFKD', u'î ï í ī į ì').encode('ASCII', 'ignore')
'i i i i i i'

无需遍历任何内容。先前的答案效率很低。

>>> import timeit
>>> code = """
import string, unicodedata
def remove_accents(data):
    return ''.join(x for x in unicodedata.normalize('NFKD', data) if x in string.ascii_letters).lower()
"""
>>> timeit.timeit("remove_accents(u'séquoia')", setup=code)
3.6028339862823486
>>> timeit.timeit("unicodedata.normalize('NFKD', u'séquoia').encode('ASCII', 'ignore')", setup='import unicodedata')
0.7447490692138672

提示:越少越好

将它们放在一起:

clean_text = unicodedata.normalize('NFKD', u'séquoia').encode('ASCII', 'ignore')
if clean_text in 'Mon sequoia est vert':
    ...