我想比较2个字符串,True如果字符串相同,则不考虑重音.
示例:我想以下代码打印'Bonjour'
if 'séquoia' in 'Mon sequoia est vert':
print 'Bonjour'
Run Code Online (Sandbox Code Playgroud)
你应该使用Unidecode包中的unidecode函数:
from unidecode import unidecode
if unidecode(u'séquoia') in 'Mon sequoia est vert':
print 'Bonjour'
Run Code Online (Sandbox Code Playgroud)
(抱歉,聚会迟到了!!)
\n\n相反,这样做怎么样:
\n\n>>> unicodedata.normalize(\'NFKD\', u\'\xc3\xae \xc3\xaf \xc3\xad \xc4\xab \xc4\xaf \xc3\xac\').encode(\'ASCII\', \'ignore\')\n\'i i i i i i\'\nRun Code Online (Sandbox Code Playgroud)\n\n不需要循环任何东西。@Maxime Lorant 的回答非常低效。
\n\n>>> import timeit\n>>> code = """\nimport string, unicodedata\ndef remove_accents(data):\n return \'\'.join(x for x in unicodedata.normalize(\'NFKD\', data) if x in string.ascii_letters).lower()\n"""\n>>> timeit.timeit("remove_accents(u\'s\xc3\xa9quoia\')", setup=code)\n3.6028339862823486\n>>> timeit.timeit("unicodedata.normalize(\'NFKD\', u\'s\xc3\xa9quoia\').encode(\'ASCII\', \'ignore\')", setup=\'import unicodedata\')\n0.7447490692138672\nRun Code Online (Sandbox Code Playgroud)\n\n提示:越少越好
\n\n另外,我确信unidecode@Seur 建议的包还有其他优点,但与不需要第三方库的本机选项相比,它仍然非常慢。
>>> timeit.timeit("unicodedata.normalize(\'NFKD\', u\'s\xc3\xa9quoia\').encode(\'ASCII\', \'ignore\')", setup="import unicodedata")\n0.7662729263305664\n>>> timeit.timeit("unidecode.unidecode(u\'s\xc3\xa9quoia\')", setup="import unidecode")\n7.489392042160034\nRun Code Online (Sandbox Code Playgroud)\n\n提示:越少越好
\n\n把它们放在一起:
\n\nclean_text = unicodedata.normalize(\'NFKD\', u\'s\xc3\xa9quoia\').encode(\'ASCII\', \'ignore\')\nif clean_text in \'Mon sequoia est vert\':\n ...\nRun Code Online (Sandbox Code Playgroud)\n
你应该看看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
Run Code Online (Sandbox Code Playgroud)