2016-11-16 74 views
0

提取井號標籤,我處理了一些微博在選舉期間我挖掘,我需要一種方法來提取鳴叫文本主題標籤,同時考慮標點符號,非Unicode字符等,同時仍保留在主題標籤輸出的列表。Python的正則表達式表達從文本

例如,從鳴叫的一部開拓創新的文字是這樣的:

我和她在一起! #NeverTrump #DumpTrump#imwithherðŸ‡ð🇸@威廉斯堡,布魯克林

當在python中變成一個字符串(甚至放入本站的代碼塊)時,結尾處的特殊字符被改變,產生這個:

"I'm with HER! #NeverTrump #DumpTrump #imwithherdY\xd8\xa7dY\xd8, @ Williamsburg, Brooklyn" 

現在我想解析字符串變成一個列表如下:

['#NeverTrump','#DumpTrump', '#imwithher'] 

我目前使用這個表達式,其中str是上面的字符串:

tokenizedTweet = re.findall(r'(?i)\#\w+', str, flags=re.UNICODE) 

不過,我得到這個作爲輸出:

['#NeverTrump', '#DumpTrump', '#imwithherdY\xd8'] 

我怎麼會在我的正則表達式佔「DY \ XD8」將它排除在外? 我也接受其他不涉及正則表達式的解決方案。

+1

我認爲'#imwithherdY \ XD8 \ xa7dY \ xd8'已滿hastag,不'」 #imwithherdY \ xd8''或'#imwithher''。它給'#imwithherdYاdYØ' – furas

+0

可能是一個愚蠢的問題,但有什麼特別之處'dY',我們怎麼能確定它從一個普通的字? –

+0

@SebastianProske編輯我的問題,以澄清爲什麼'dY'是存在的。 – purelyp93

回答

2

嚴,對不涉及正則表達式的解決方案。 )

# -*- coding: utf-8 -*- 
import string 
tweets = [] 

a = "I'm with HER! #NeverTrump #DumpTrump #imwithher🇺🇸 @ Williamsburg, Brooklyn" 

# filter for printable characters then 
a = ''.join(filter(lambda x: x in string.printable, a)) 

print a 

for tweet in a.split(' '): 
    if tweet.startswith('#'): 
     tweets.append(tweet.strip(',')) 

print tweets 

和多田:[ '#NeverTrump', '#DumpTrump', '#imwithher']

+0

它使用逗號給推文。這是不正確的標籤。 – furas

+0

@furas,給出['#NeverTrump','#DumpTrump','#imwithherdY \ xd8 \ xa7dY \ xd8'] now ^^ –

+0

'''''''','''或者其他字符怎麼樣? – furas