Skip to main content
 首页 » 编程设计

python之如何使用 python 删除推文/字符串中的用户提及和 url

2025年05月04日21sky-heaven

所以我想删除推文/字符串中的所有用户提及和 url。

例如,如果我有这样一条推文:

@username1: some tweet here, http://www.url.com, aaaaa @username2 

我想得到这样的东西:

some tweet here, aaaaa 

我想使用正则表达式,但我是 python 的新手,不知道该怎么做。

此外,推文存储在一个 JSON 文件(字典列表)中,每条推文(字典)都有一个名为“entities”的键,它存储有关“user_mentions”、“urls”和“hashtags”的信息格式如下:

{u'user_mentions': [{u'indices': [3, 18], 
                     u'screen_name': u'username1', 
                     u'id': 1234567, 
                     u'name': u'user name 1', 
                     u'id_str': u'1234567'}, 
 
                    {u'indices': [108, 116], 
                     u'screen_name': u'username2', 
                     u'id': 112233, 
                     u'name': u'user name 2', 
                     u'id_str': u'112233'}], 
 
 u'hashtags': [], 
 u'urls': [{u'url': u'http://www.url.com', 
            u'indices': [83, 103], 
            u'expanded_url': u'http://www.url.com', 
            u'display_url': u'http://www.url.com'}] 
} 

有谁知道如何删除用户提及和网址? 非常感谢!

请您参考如下方法:

from itertools import chain 
 
result = [] 
for text, entries in ((t["text"], t["entries"]) for t in tweets): 
    urls = (e["url"] for e in entries["urls"]) 
    users = ("@"+e["screen_name"] for e in entries["user_mentions"]) 
    text = reduce(lambda t,s: t.replace(s, ""), chain(urls, users), text) 
    result.append(text) 

或使用正则表达式(它还会删除尾随的非空白字符):

text = re.sub(r"(?:\@|https?\://)\S+", "", text) 

或者两种方法的结合:

text = re.sub(r"(?:%s)\S*" % "|".join(map(re.escape, chain(urls, users))), "", text)