从字符串中删除前缀为#或@的单词?

时间:2012-11-12 22:43:16

标签: python

我有一个这样的文本块:

Hello @Simon, I had a great day today. #StackOverflow

我希望找到最优雅的解决方案,将其剥离,如下所示:

Hello, I had a great day today.

即。我想删除所有前缀为#和@的单词。 (是的,我正在检查推文)

我是python的新手,我会在单个单词上做这个,但不确定在包含多个单词的字符串上实现此目的的最佳方法。

我的第一个想法是使用替换,但这只会删除实际的@和#符号。 寻找剥离任何前缀为#或@的单词的最佳方式。

CNC中 不确定这是否会使答案无效,但是为了接受,我还需要删除多个单词包含#或$前缀的位置。例如你好#hiya #ello

3 个答案:

答案 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是您的推文。