0

重複の可能性:
Python 正規表現の使用 - 一致の位置を取得する方法

私はpythonが初めてです。コマンドライン引数を使用して、正規表現を使用して Web ページから正確な数を抽出するプログラムを作成しました。最初の引数は「Amount」である必要があり、2 番目は「From」である必要があり、3 番目は「To」である必要があります。サイトから正確な数を抽出する必要があります" http ://www.xe.com/ucc/convert/?Amount=1&From=INR&To=USD "変換された金額を抽出する必要があります。コードは次のとおりです。

import requests
import re
import sys

amount=sys.argv[1]
from_=sys.argv[2]
to=sys.argv[3]
r = requests.get("http://www.xe.com/ucc/convert/?Amount=%(amount)s&From=%(from_)s&To=%(to)s"%{"amount":amount,"from_":from_,"to":to})
dataCrop=re.findall('[0-9,]+\.[0-9]+',r.text)
if amount<'1':
    print dataCrop[15]
else:
    print dataCrop[11]

しかし、問題は、正確な位置を使用すべきではないことです

if amount<'1':
    print dataCrop[15]
else:
    print dataCrop[11]

その代わりに、正規表現を変更する必要があります。これを正規表現で書くにはどうすればよいですか?綺麗なスープが使えません。

4

2 に答える 2

2

re.searchメソッドはMatchObjectを返します。そのspanメソッドを使用して、一致の位置を見つけることができます。お役に立てれば :-)

于 2012-08-29T05:37:59.783 に答える
1

あなたの場合、正規表現が一致する位置はあまり有用な情報ではありません。@Raymond Hettingerが示唆したように、経由で簡単にアクセスできますre.MatchObject

タスクを 3 つのステップに分割できます。

Web ページの URL を構築する

import sys
import urllib

if len(sys.argv) != 4:
    sys.exit(2)

params = urllib.urlencode(zip("Amount From To".split(), sys.argv[1:]))
url = "http://example.com/path/?" + params

urlencode()の適切なエンコードを提供しますsys.argv

ウェブページを取得する

from selenium.webdriver import Firefox as Browser # pip install selenium

browser = Browser()
try:
    browser.implicitly_wait(3) # seconds
    browser.get(url)
    page = browser.page_source
finally:
    browser.quit() # quit no matter what

selenium.webdriverJavaScript を使用して生成されたページを処理します。

その中の関連データを見つける

import re

print re.findall(r'(\d+.\d+).*?"uniq_class_near_data"', page)

ページのマークアップが変更されると壊れます。

比較のためのBeautifulSoupバリアントは次のとおりです。

from bs4 import BeautifulSoup # pip install beautifulsoup4

soup = BeautifulSoup(page)
print [span.find_previous_sibling(text=re.compile(r'\d+.\d+')).strip()
       for span in soup('span', class_="uniq_class_near_data", limit=2)]
于 2012-08-29T07:47:47.283 に答える