可能重复:
What is the best way to remove accents in a python unicode string?
Python and character normalization
我想删除重音,将所有字符都改为小写,并删除任何数字和特殊字符。
示例:
Frédér8ic@ - >弗雷德里克
提案:
def remove_accents(data):
return ''.join(x for x in unicodedata.normalize('NFKD', data) if \
unicodedata.category(x)[0] == 'L').lower()
有没有更好的方法呢?
答案 0 :(得分:14)
可能的解决方案是
def remove_accents(data):
return ''.join(x for x in unicodedata.normalize('NFKD', data) if x in string.printable).lower()
使用NFKD AFAIK是规范化unicode以将其转换为兼容字符的标准方法。其余的是删除源自规范化的特殊字符数字和unicode字符,您可以简单地与string.ascii_letters
进行比较,并删除不在该集合中的任何字符。
答案 1 :(得分:1)
您可以将字符串转换为HTML实体吗?如果是这样,那么您可以使用简单的正则表达式。
以下替换将在PHP / PCRE中起作用(请参阅my other answer示例):
'~&([a-z]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i' => '$1'
然后只需从HTML实体转换回来并删除任何非a-Z
字符(demo @ CodePad)。
抱歉,我不太了解Python,无法提供Pythonic答案。