0

我有一个这样的文本块:

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

我想找到最优雅的解决方案来剥离它看起来像这样:

Hello, I had a great day today.

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

我是 python 新手,我可以在单个单词上执行此操作,但不确定在包含多个单词的字符串上实现此目的的最佳方法。

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

-编辑-不确定这是否会使给出的答案无效,但为了接受,我还需要去掉多个单词包含#或$前缀的位置。例如你好#hiya #ello

4

3 回答 3

4

您可以使用正则表达式

>>> 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.'
于 2012-11-12T22:48:22.293 回答
1

就像编写一个匿名函数并将其放入过滤器语句中一样简单

' '.join(filter(lambda x: x[0] not in ['@','#'], tweet.split()))

这将丢失@users 或#topics 上的逗号,但如果您只是处理推文,您可能不会错过它。

于 2012-11-12T22:47:14.700 回答
0
' '.join([w for w in s.split() if len(w)>1 and w[0] not in ['@','#']])

s你的推文在哪里。

于 2012-11-12T22:49:25.563 回答