0

可能重复:
Python Regex Use - How to Get Positions of Matches

我是 python 新手。我编写了程序,我使用正则表达式使用命令行参数从网页中提取确切数字。第一个参数应该是“金额”第二个应该是“从”第三个应该是“到”。我应该从网站“ 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.

你可以把你的任务分成三个步骤。

构造网页的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.webdriver负责使用 javascript 生成的页面。

在其中查找相关数据

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 回答