2012-11-18 30 views
4

我有以下字符串,我想從中提取qgeocode值。正則表達式提取部分Twitter查詢

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

我試過下面的正則表達式。

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

但是,vals是None。我也不確定如何在q==之間找到某種東西。

回答

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聲明

from cgi import parse_qs 
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應該包含字符串的所有鍵值對。

+4

無論是否爲正則表達式,最好使用現有的經過測試的代碼,比如urllib。 –

+0

當然!我不太熟悉它。 – 0605002