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

Bas*_*asj 7 python string

我想比较2个字符串,True如果字符串相同,则不考虑重音.

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

if 'séquoia' in 'Mon sequoia est vert':
    print 'Bonjour'
Run Code Online (Sandbox Code Playgroud)

Suo*_*uor 6

你应该使用Unidecode包中的unidecode函数:

from unidecode import unidecode

if unidecode(u'séquoia') in 'Mon sequoia est vert':
    print 'Bonjour'
Run Code Online (Sandbox Code Playgroud)


Jav*_*zzi 6

抱歉,聚会迟到了!!

\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\'\n
Run 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\n
Run Code Online (Sandbox Code Playgroud)\n\n

提示:越少越好

\n\n

另外,我确信unidecode@Seur 建议的包还有其他优点,但与不需要第三方库的本机选项相比,它仍然非常慢。

\n\n
>>> 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\n
Run Code Online (Sandbox Code Playgroud)\n\n

提示:越少越好

\n\n

把它们放在一起:

\n\n
clean_text = unicodedata.normalize(\'NFKD\', u\'s\xc3\xa9quoia\').encode(\'ASCII\', \'ignore\')\nif clean_text in \'Mon sequoia est vert\':\n    ...\n
Run Code Online (Sandbox Code Playgroud)\n


Max*_*ant 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
Run Code Online (Sandbox Code Playgroud)

stackoverflow的引用