我正在搜索html格式的网站,查找具有以下格式的字符串(“s”):
<td class="number">$0.48</td>
我试图通过使用正则表达式返回“$ 0.48”。它一直工作到今天,我不知道发生了什么变化,但这是我的代码片段:
def scrubdividata(ticker):
sleep(1.0) # Time in seconds.
f = urllib2.urlopen('the url')
lines = f.readlines()
for i in range(0,len(lines)):
line = lines[i]
if "Annual Dividend:" in line:
print 'for ticker %s, annual dividend is in line'%(ticker)
s = str(lines[i+1])
print s
start = '>$'
end = '</td>'
AnnualDiv = re.search('%s(.*)%s' % (start, end), s).group(1)
结果如下:
for ticker A, annual dividend is in line
<td class="number">$0.48</td>
Traceback (most recent call last):
File "test.py", line 115, in <module>
scrubdividata(ticker)
File "test.py", line 34, in scrubdividata
LastDiv = re.search('%s(.*)%s' % (start, end), s).group(1)
AttributeError: 'NoneType' object has no attribute 'group'
我正在使用python 2.5(我相信)。我听说永远不会用html使用正则表达式,但我需要快速利用我有限的知识来尽快完成工作,而正则表达式是我所知道的唯一方法。现在,我是在承受后果,还是有另一个问题导致这种情况发生?任何见解都会很精彩!
谢谢,B
答案 0 :(得分:3)
来自文档:
“$”匹配字符串的结尾或刚好在换行符之前 字符串的结尾。
所以你可能想要像这样逃避这条线上的美元符号:
start = '>\$'
如果您考虑将来再进行HTML搜索,我建议您查看Beautiful Soup模块。它比正则表达式更宽容。
答案 1 :(得分:1)
你需要逃脱美元符号。
start = '>\$'
end = '</td>'
AnnualDiv = re.search('%s(.*)%s' % (start, end), s).group(1)
原因是$
是正则表达式中的特殊字符。 (它匹配字符串的结尾或换行符之前。)
这会将AnnualDiv
设置为字符串'0.48'
。如果您想添加$
,可以使用以下方法添加:
AnnualDiv = "$%s" % re.search('%s(.*)%s' % (start, end), s).group(1)