如果字符串相同,我想比较2个字符串并且True
,而不考虑重音。
示例:我想要以下代码来打印'Bonjour'
if 'séquoia' in 'Mon sequoia est vert':
print 'Bonjour'
答案 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
答案 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':
...