从字符串中删除特殊字符,例如笑脸,但保留德语特殊字符

Remove special characters from string such as smileys but keep german special charactes

我知道如何删除字符串中不需要的字符,例如笑脸符号等。但是,某些语言(如德语)也有特殊字符。

这是我当前的代码:

import unicodedata
string = "süß "
uni_str = str(unicodedata.normalize('NFKD', \
           string).encode('ascii','ignore'))

是否可以保留德语特殊字符而不删除其他不需要的字符,例如笑脸符号?这样 uni_str 将在末尾保留字母 "süß"?

目前,笑脸会被删除,但德文字符也会转换为其他人声或删除。

示例中的笑脸只是示例,可以是任何不需要的字符。

我正在使用 Python 3.6 和 Windows 10

您可以像这样简单地做一些事情(只需添加德语字母):

def filter_characters(self, value):
    allowed_characters = " 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
    return ''.join(c for c in value if c in allowed_characters )

编辑

另一种可能性是在字符串模块的帮助下创建 allowed_characters:

import string
allowed_characters = string.printable + 'öäüß'

我不知道哪些字符在你的世界中是特殊的或不需要的,但也许删除所有带有 "Symbol, Other" 属性 的字符是有用的:

import unicodedata as ud

def remove_symbols(text):
    return ''.join(c for c in text if ud.category(c) != 'So')

这将保留任何字母、数字、标点符号和白色 space 字符,因此以下示例不会丢失花哨的引号或“é”:

>>> remove_symbols('Was für ein «süßes» Café! ')
'Was für ein «süßes» Café! '

查看 Wikipedia 上的可用类别或在 unicode.org 上搜索。