删除重音和特殊字符

Fre*_*red 9 python diacritics

可能重复:
在python unicode字符串中删除重音的最佳方法是什么?
Python和字符规范化

我想删除重音,将所有字符都改为小写,并删除任何数字和特殊字符.

示例:

Frédér8ic@ - >弗雷德里克

提案:

def remove_accents(data):
    return ''.join(x for x in unicodedata.normalize('NFKD', data) if \
    unicodedata.category(x)[0] == 'L').lower()
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来做到这一点?

Abh*_*jit 14

一个可能的解决方案是

def remove_accents(data):
    return ''.join(x for x in unicodedata.normalize('NFKD', data) if x in string.printable).lower()
Run Code Online (Sandbox Code Playgroud)

使用NFKD AFAIK是规范化unicode以将其转换为兼容字符的标准方法.其余的是为了删除源自规范化的特殊字符数字和unicode字符,您可以简单地比较string.ascii_letters并删除不在该集合中的任何字符.

  • 但是该命令中的字符串变量是什么?你在string.ascii_letters中引用`if x的地方 (2认同)