4

qと値を抽出したい次の文字列がありgeocodeます。

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

次の正規表現を試してみました。

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

ただし、valsはNoneです。また、前に何かを見つける方法もわかりませq==

4

2 に答える 2

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
于 2012-11-18T17:17:16.267 に答える
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、文字列のすべてのキーと値のペアが含まれている必要があります。

于 2012-11-18T17:21:00.217 に答える