我有一个这样的文本块:
Hello @Simon, I had a great day today. #StackOverflow
我希望找到最优雅的解决方案,将其剥离,如下所示:
Hello, I had a great day today.
即。我想删除所有前缀为#和@的单词。 (是的,我正在检查推文)
我是python的新手,我会在单个单词上做这个,但不确定在包含多个单词的字符串上实现此目的的最佳方法。
我的第一个想法是使用替换,但这只会删除实际的@和#符号。 寻找剥离任何前缀为#或@的单词的最佳方式。
CNC中 不确定这是否会使答案无效,但是为了接受,我还需要删除多个单词包含#或$前缀的位置。例如你好#hiya #ello
答案 0 :(得分:4)
您可以使用regular expressions:
>>> import re
>>> s = 'Hello @Simon, I had a great day today. #StackOverflow'
>>> re.sub(r'(?:^|\s)[@#].*?(?=[,;:.!?]|\s|$)', r'', s)
'Hello, I had a great day today.'
答案 1 :(得分:1)
就像编写匿名函数并将其放在过滤语句中一样简单
' '.join(filter(lambda x: x[0] not in ['@','#'], tweet.split()))
这会丢失@users或#topics上的逗号,但如果你只是处理推文,你可能不会错过它。
答案 2 :(得分:0)
' '.join([w for w in s.split() if len(w)>1 and w[0] not in ['@','#']])
s
是您的推文。