从推文中移除用户
我有一个Python脚本,可以从推文中去掉“RT”这个标记和“#”这个标签。现在我想把用户名也去掉,也就是那些以“@”符号开头,后面跟着用户名,再后面跟着一个冒号的内容。我只想去掉这样的用户名。例如,如果推文是“@bugun: MHP’li Kemallettin Yılmaz Bank Asya'ya yapılan intihardır http://t.co/AKxMgMuuSs @bugun http://t.co/fyJbr098tw”,我想去掉“@bugun:”,最终得到的结果应该是“MHP’li Kemallettin Yılmaz Bank Asya'ya yapılan intihardır http://t.co/AKxMgMuuSs @bugun http://t.co/fyJbr098tw”。
这是我用来去掉推文中标签和RT标记的代码:
# coding:utf-8
import sys, re
x = open("test.txt", "r")
for line in x:
z = lambda line: re.compile('\#').sub('', re.compile('RT @').sub('@', line, count=1).strip())
print z(line)
saveFile = open("test_result.txt", "a")
saveFile.write(z(line))
saveFile.write("\n")
saveFile.close()
2 个回答
你需要做的就是找到合适的正则表达式。顺便说一下,我在你的例子中加了一个井号,并稍微修改了你的代码,以便也能去掉这个井号——我不确定这是否是你想要的效果。下面这个函数会去掉任何井号,以及在“RT @”后面跟着的用户名,还有后面跟着的“: ”。希望这能帮到你。
import sys, re
tweet_text = "RT @bugun: MHP’li Kemallettin Yılmaz #Hello Bank Asya'ya yapılan intihardır http://t.co/AKxMgMuuSs @bugun http://t.co/fyJbr098tw"
def transform_tweet(line):
return re.compile('#\w+ ').sub('', re.compile('RT @\w+: ').sub('', line, count=1)).strip()
运行 transform_tweet(tweet_text)
,我得到了这个:
"MHP’li Kemallettin Yılmaz Bank Asya'ya yapılan intihardır http://t.co/AKxMgMuuSs @bugun http://t.co/fyJbr098tw"
根据你给的例子:
"@bugun: MHP’li Kemallettin Yılmaz Bank Asya'ya yapılan intihardır http://t.co/AKxMgMuuSs @bugun http://t.co/fyJbr098tw}"
这段代码(Python 3.4):
# coding:utf-8
import sys, re
x = open("test.txt", "r")
for line in x:
z = lambda line: re.compile('\#').sub('', re.compile('^@\w+: ').sub('', line, count=1).strip())
print (z(line))
saveFile = open("test_result.txt", "a")
saveFile.write(z(line))
saveFile.write("\n")
saveFile.close()
将会输出:
MHP’li Kemallettin Yılmaz Bank Asya'ya yapılan intihardır http://t.co/AKxMgMuuSs @bugun http://t.co/fyJbr098tw