关于python:删除重音和特殊字符

removing accent and special characters

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
What is the best way to remove accents in a python unicode string?
Python and character normalization

我想删除重音符号,将所有字符都转换为小写,并删除任何数字和特殊字符。

例子:

弗雷德里克

建议:

1
2
3
def remove_accents(data):
    return ''.join(x for x in unicodedata.normalize('NFKD', data) if \
    unicodedata.category(x)[0] == 'L').lower()

有没有更好的办法?


可能的解决办法是

1
2
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进行比较,并删除不在该集合中的任何字符。


可以将字符串转换为HTML实体吗?如果是这样,那么可以使用简单的正则表达式。

下面的替换将在php/pcre中工作(请参阅我的其他答案以获取示例):

1
'~&([a-z]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i' => '$1'

然后简单地从HTML实体转换回并删除任何非a-Z字符(demo@codepad)。

抱歉,我对Python的了解不够,无法提供Python式的答案。