所以我想删除推文/字符串中的所有用户提及和 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)
