我正在尝试为我从NLTK获得的字符串进行正则表达式匹配。我有一个股票类,其方法可以从edgar获得10k,并使用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是否正确导入。
答案 0 :(得分: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>
要使程序健壮,请检查调用的返回值:
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