0

我正在一个 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 中使用正则表达式,但我需要快速利用我有限的知识来尽快完成工作,而正则表达式是我所知道的唯一方法。现在,我是在承受后果还是有其他问题导致了这种情况?任何见解都会很棒!

谢谢,乙

4

2 回答 2

3

从文档:

"$" 匹配字符串的结尾或字符串结尾的换行符之前。

所以你可能想像这样逃避这一行的美元符号:

start = '>\$'

如果您考虑将来通过 HTML 进行更多搜索,我建议您查看Beautiful Soup模块。它比正则表达式更宽容。

于 2013-07-19T18:48:27.727 回答
1

您需要转义美元符号。

start = '>\$'
end = '</td>'
AnnualDiv = re.search('%s(.*)%s' % (start, end), s).group(1)

原因是 the$是正则表达式中的特殊字符。(它匹配字符串的结尾或换行符之前。)

这将设置AnnualDiv为字符串'0.48'。如果要添加$,可以使用以下方法:

AnnualDiv = "$%s" % re.search('%s(.*)%s' % (start, end), s).group(1)
于 2013-07-19T18:43:21.160 回答