【问题标题】:Remove special characters from string such as smileys but keep german special charactes从字符串中删除特殊字符,例如笑脸,但保留德语特殊字符
【发布时间】:2018-06-24 12:35:54
【问题描述】:

我知道如何删除字符串中不需要的字符,例如笑脸等。但是,像德语这样的一些语言也有特殊字符。

这是我当前的代码:

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

是否有可能保留德语特殊字符但删除其他不需要的字符,例如像????????????的笑脸?这样uni_str 将在末尾保留字母“süß”?

目前,笑脸将被删除,但德语角色要么被转换为其他人声,要么也被删除。

示例中的笑脸只是示例,可以是任何不受欢迎的角色。

我正在使用 Python 3.6 和 Windows 10

【问题讨论】:

    标签: python python-3.x unicode ascii python-module-unicodedata


    【解决方案1】:

    你可以做一些简单的事情(只需添加德语字母):

    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 + 'öäüß'
    

    【讨论】:

    • 这似乎是一种解决方法,但这也意味着包含用 ascii 编码的每个特殊字符,例如 "!"§$%&/()=?,;.:-_" 等. ? 是否有可能从一种字符集中获取允许的字符,然后将其扩展到德语字符集中?
    • 使用set 可能会加快速度。
    • +1 使用集合而不是字符串/列表来保持 O(1) 次查找(即使允许的字符串很短)
    • 是的,我同意一组会快很多。
    【解决方案2】:

    我不知道你的世界中哪些字符是特殊的或不需要的,但也许删除所有具有“符号,其他”属性的字符是有用的:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-11
      • 2016-01-23
      • 1970-01-01
      • 2019-11-09
      相关资源
      最近更新 更多