删除重音和特殊字符

时间:2012-01-01 18:53:12

标签: python diacritics

  

可能重复:
  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()

有没有更好的方法呢?

2 个答案:

答案 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答案。