2017-02-23 44 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

相關問題