-4

コマンドラインでプログラムを実装していて、次のようなコードを書きました:

import requests
import re
import sys

amount=[]
l=len(sys.argv)
from_=sys.argv[l-2]
to=sys.argv[l-1]
for i in range(1,l-2):
    amount.append(sys.argv[i])
for i in amount:
    r = requests.get("http://www.xe.com/ucc/convert/?Amount=%(amount)s&From=%(from_)s&To=%(to)s"%{"amount":i,"from_":from_,"to":to})
    #dataCrop=re.findall('[0-9,]+\.[0-9]+',r.text)
    dataCrop=re.compile(r'[0-9,]+\.[0-9]+')
    for m in dataCrop.finditer(r.text):
        print m.group()

プログラムを実行すると、次のような出力が得られました。

1.0
1.1
3.43
1.1
1.1
1.1
1999.09
1.1
1999.09
4.7
1.00
55.6565
55.6565
0.0179674
1.00000
0.79649
0.63231
55.6565
0.96365
0.98866
8.42406
1.24172
78.5433
1.00000
1.25551
1.58151
0.01797
1.03772
1.01147
0.11871
0.80533
0.01273
0.01797
0.01431
0.01136
1.00000
0.01731
0.01776
0.15136
0.02231
1.41122
55.6565
69.8771
88.0212
1.00000
57.7556
56.2947
6.60685
44.8219
0.70861
9.4
2.0

しかし、出力 '55.6565' (12 番目の位置にあり、配列の 11 番目の位置にある) だけが必要です。正規表現をどのように変更すればよいですか?

4

1 に答える 1

0

彼らのサービスを購入する必要があります。その場合、別の形式のデータを処理する必要がありますが、プログラミングの観点から見た一般的な考え方は同じです。

まず、取得した HTML の正しい行を一致させる必要があります。次に、適切なコンテキストで数値のように見えるものを文字列内で検索し、実際の数値をグループにキャプチャするようにします。その後、完了です。問題の HTML の場合:

for line in r.text.split('\n'):  # This splits the entire HTML into lines.
  if re.search(r'<span class="uccResCde">INR</span>', line):
    match = re.search(r'>(?P<number>[0-9]+.[0-9]+)', line)
    if not match:
      raise Exception('Expected to find a number but did not.')
    print match.group('number')

これは以下を出力します:

55.5211
于 2012-08-31T23:11:30.213 に答える