如何在python中使用正则表达式提取精确位置?

时间:2012-08-29 05:27:22

标签: python regex

  

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

我是python的新手。我编写了程序,我使用正则表达式使用命令行参数从网页中提取确切的数字。第一个参数应该是'Amount'第二个应该是'From'第三个应该是'To'。我应该从网站提取确切的数字“{ {3}}“应提取转换后的金额。代码是:

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]

而不是我应该修改我的正则表达式。我怎么能为此编写正则表达式?我不能用美味的汤。

2 个答案:

答案 0 :(得分:2)

re.search方法返回MatchObject。您可以使用其span方法查找匹配的位置。希望这会有所帮助: - )

答案 1 :(得分:1)

正则表达式匹配的位置在您的情况下不是非常有用的信息。虽然@Raymond Hettinger建议可以通过re.MatchObject轻松访问它。

您可以将任务分为三个步骤。

构建网页的网址

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)]