2017-02-23 46 views
0

我想要得到tweet中没有提到的词(以@开头)或标签(以#开头)。Python正则表达式来获取tweet中所有不是@mention或#hashtag的单词

我的代码是这样的:

import re 
pattern=r'(?u)\b\w\w+\b' 
pattern=re.compile(pattern) 
pattern.findall('this is a tweet #hashtag @mention') 

与此正则表达式的结果是 这是一个鸣叫包括hashtag提

,但我不希望包括hashtag的结果。 我想要得到的结果是:

这是一个鸣叫

请注意,我不能代替空格使用\ B的,因为输出 。这是一个鸣叫(注意。在开始时) 也应该是 [这是一个鸣叫] \ b强制一个词的开始是任何非字母数字,但如果我使用\ s然后将不会在结果。

+1

充分利用@和#字符的前缀(可选)你的话,你申请 –

+0

我给这个正则表达式正则表达式后,然后过滤输出另一个不是我的功能(scikit-learn的tfidfvectorizer),所以我不能做任何post/pre处理,正则表达式应该完成这项工作。 – Ash

回答

1
(?<![#@])\b\w+\b 

您可以使用此示例。

https://regex101.com/r/KzHvuy/2

+0

谢谢,这是有效的,但考虑到一个单词之前的字符可以是任何非字母数字,因为这是一个推文(它应该将此作为结果的一部分返回)我希望从\ b中排除@和#。 – Ash

+0

是的,这是它,谢谢@ vks。 – Ash

+0

有一个问题@vks,你知道原始文章正则表达式开头的那个(?u)吗? (它从sklearn复制)。 – Ash

0

如果你是开放的比regex其他的解决方案,那么你就可以利用filter和期望的结果lambda功能。

a = 'this is a tweet #hashtag @mention' 
" ".join(filter(lambda x:x[0]!='#' and x[0]!='@' , a.split())) 

“这是推特”

+0

谢谢,但必须把它交给另一个函数。 – Ash

相关问题