去除重音和特殊字符
我想去掉重音符号,把所有字符都变成小写,还要删除任何数字和特殊字符。
举个例子:
Frédér8ic@ --> frederic
提议:
def remove_accents(data):
return ''.join(x for x in unicodedata.normalize('NFKD', data) if \
unicodedata.category(x)[0] == 'L').lower()
有没有更好的方法来做到这一点?
2 个回答
1
你能把字符串转换成HTML实体吗?如果可以的话,你可以用一个简单的正则表达式来实现。
下面这个替换方法在PHP/PCRE中是可行的(想看例子可以参考我其他的回答):
'~&([a-z]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i' => '$1'
然后只需要把HTML实体再转换回来,并去掉任何不是 a-Z
的字符(可以在CodePad上看演示)。
抱歉,我对Python不太了解,没法提供一个Python的答案。
15
一个可能的解决办法是
def remove_accents(data):
return ''.join(x for x in unicodedata.normalize('NFKD', data) if x in string.printable).lower()
据我所知,使用 NFKD 是将 Unicode 标准化的常用方法,这样可以把它转换成兼容的字符。至于如何去掉那些特殊字符、数字和由于标准化而产生的 Unicode 字符,你可以简单地用 string.ascii_letters
来比较,去掉那些不在这个集合里的字符。