我想删除重音符号,将所有字符转换为小写,并删除任何数字和特殊字符。
例如:
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()
有没有更好的方法来完成这个任务?
我想删除重音符号,将所有字符转换为小写,并删除任何数字和特殊字符。
例如:
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()
有没有更好的方法来完成这个任务?
可能的解决方案是
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
进行比较,并删除不在该集合中的任何字符。
if x in string.ascii_letters
时。 - Falcoadef remove_accents(self, data):
return unicodedata.normalize('NFKD', data).encode('ASCII', 'ignore')
- lesimoes'~&([a-z]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i' => '$1'
然后只需将HTML实体转换回来,并删除任何非a-Z
字符({{link1:demo @ CodePad}})。
抱歉,我不太了解Python,无法提供Pythonic的答案。
unidecode
库似乎很棒。 - Alix Axel