正则表达式提取部分Twitter查询

时间:2012-11-18 17:11:41

标签: python regex python-2.7

我有以下字符串,我想从中提取qgeocode值。

 ?since_id=261042755432763393&q=salvia&geocode=39.862712%2C-75.33958%2C10mi

我尝试过以下正则表达式。

expr = re.compile('\[\=\](.*?)\[\&\]')
vals = expr.match(str)

但是,val是None。我还不确定如何在q==之前找到一些东西。

2 个答案:

答案 0 :(得分:7)

不需要正则表达式(使用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

答案 1 :(得分:1)

我认为这可以在没有正则表达式的情况下轻松完成:

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应该包含字符串的所有键值对。