如何从推文中删除特殊字符(例如`'ŒðŸ'`)

时间:2017-02-21 14:47:28

标签: python regex twitter data-cleaning

我必须从推文中清除👉👌💦✨等特殊字符。为了做到这一点,我遵循了这个策略(我使用Python 3):

  1. 将推文从字节转换为字符串以将特殊字符设为十六进制,因此Ã变为\xc3\;
  2. 使用正则表达式,删除b'b"(在字符串的开头)并添加'"(在字符串末尾)在转换过程之后通过Python;
  3. 最后删除十六进制表示,也使用正则表达式。
  4. 这是我的代码:

    import re
    tweet = 'b"[/Very seldom~ will someone enter your life] to question\xc3\xa2\xe2\x82\xac\xc2\xa6 "'
    
    #encoding to 'utf8'
    tweet_en = tweet.encode('utf8')
    #converting to string
    tweet_str = str(tweet_en)
    #eliminating the b' and b" at the begining of the string:
    tweet_nob = re.sub(r'^(b\'b\")', '', tweet_str)
    #deleting the single or double quotation marks at the end of the string:
    tweet_noendquot = re.sub(r'\'\"$', '', tweet_nob)
    #deleting hex
    tweet_regex = re.sub(r'\\x[a-f0-9]{2,}', '', tweet_noendquot)
    print('this is tweet_regex: ', tweet_regex)
    

    最终输出为:[/Very seldom~ will someone enter your life] to question "(我仍然无法删除最终的")。我想知道是否有一种更好,更直接的方法来清理Twitter数据中的特殊字符。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

如果你只是在寻找ASCII字符,我认为这样可以正常工作:

initial_str = 'Some text 👉👌💦✨ and some more text'
clean_str = ''.join([c for c in initial_str if ord(c) < 128])
print(clean_str)  # Some text  and some more text

您可以执行ord(c) in range(),并为其提供一系列您希望保留的文字(可能包括表情符号)。