我有以下字符串,我想从中提取q
和geocode
值。
?since_id=261042755432763393&q=salvia&geocode=39.862712%2C-75.33958%2C10mi
我尝试了以下正则表达式。
expr = re.compile('\[\=\](.*?)\[\&\]')
vals = expr.match(str)
但是,vals 是None
. 我也不确定如何找到之前的东西,比如q=
vs =
。
我有以下字符串,我想从中提取q
和geocode
值。
?since_id=261042755432763393&q=salvia&geocode=39.862712%2C-75.33958%2C10mi
我尝试了以下正则表达式。
expr = re.compile('\[\=\](.*?)\[\&\]')
vals = expr.match(str)
但是,vals 是None
. 我也不确定如何找到之前的东西,比如q=
vs =
。
不需要正则表达式(使用 Python 3):
>>> from urllib.parse import parse_qs
>>> query = parse_qs(str[1:])
>>> query
{'q': ['salvia'], 'geocode': ['39.862712,-75.33958,10mi'], 'since_id': ['261042755432763393']}
>>> query['q']
['salvia']
>>> query['geocode']
['39.862712,-75.33958,10mi']
显然,str
包含您的输入。
由于(根据您的标签)您使用的是 Python 2.7,我认为您需要将 import 语句更改为此:
from urlparse import parse_qs
如果您在 2.6 版之前使用 Python,则 import 语句为
from cgi import parse_qs
我认为这可以在没有正则表达式的情况下轻松完成:
string = '?since_id=261042755432763393&q=salvia&geocode=39.862712%2C-75.33958%2C10mi'
parts = string[1:].split('&') # the [1:] is to leave out the '?'
pairs = {}
for part in parts:
try:
key, value = part.split('=')
pairs[key] = value
except:
pass
并且pairs
应该包含字符串的所有键值对。