2014-01-22 71 views
1

我想爲我從NLTK得到的字符串做一個正則表達式匹配。我有一個庫存類,它有一個從edgar獲得10k的方法,並使用NLTK將它們下載到一個字符串中。NLTK創建的字符串正則表達式不工作

def get_raw_10ks(self): 
       for file in self.files_10k: 
         data = self.__get_data_from_url(file) 
         raw = nltk.clean_html(data) 
         self.raw_10ks.append(raw) 

然後,在我的程序本身,我有

stock.get_raw_10ks() 
matchObj = re.match("Indicates", stock.raw_10ks[0]) 
print matchObj.group() 

我得到的錯誤

print matchObj.group() 
AttributeError: 'NoneType' object has no attribute 'group' 

然而,當我檢查的stock.raw_10ks[0]類型,它是一個字符串,當我打印出來時,最後一行是「表示管理補償計劃」,所以我不確定有什麼問題。我檢查了re和nltk是否正確導入。

回答

3

re.match()匹配輸入字符串開始處的模式。您應該使用re.search()

# match() 
>>> re.match('Indicates', 'Indicates management compensatory') 
<_sre.SRE_Match object at 0x0000000002CC8100> 
>>> re.match('Indicates', 'This Indicates management compensatory') 

# search() 
>>> re.search('Indicates', 'This Indicates management compensatory') 
<_sre.SRE_Match object at 0x0000000002CC8168> 

請參閱search() vs match()


爲了使程序健壯檢查調用的返回值:

matchObj = re.search("Indicates", stock.raw_10ks[0]) 
if matchObj is not None: # OR if matchObj: 
    print matchObj.group() 
else: 
    print 'No match found.' 

順便說一句,如果你想檢查Indicates是字符串中,使用in operator更優選:

>>> 'Indicates' in 'This Indicates management compensatory' 
True 
>>> 'Indicates' in 'This management compensatory' 
False 
+0

我知道你要通過加入「不是無」的檢查來完整,但爲了禮貌,至少我首先證明了它的功勞。 –

+0

@AaronHall,如果matchObj不是None和'如果matchObj'都可以。我正在編輯中。 – falsetru

相關問題