0

次の形式の文字列 ("s") を html 形式のサイトで検索しています。

<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

4

2 に答える 2

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)
于 2013-07-19T18:43:21.160 に答える