2012-04-04 26 views
2

我想要獲取從URL中顯示的查詢名稱和值。 例如。 url='http://host:port_num/file/path/file1.html?query1=value1&query2=value2' 解析查詢名稱及其值並打印出來。使用正則表達式在python中解析URL

+3

向我們展示您嘗試過的。 – claesv 2012-04-04 10:45:58

回答

2

我同意,最好不要使用regex和更好的使用urlparse但這裏是我regex。 類似urlparse這樣的類是專門爲處理所有網址而開發的,並且比regex更可靠,因此如果可以的話,請使用它們。

>>> x = 'http://www.example.com:8080/abcd/dir/file1.html?query1=value1&query2=value2' 
>>> query_pattern='(query\d+)=(\w+)' 
>>> # query_pattern='(\w+)=(\w+)' a more general pattern 
>>> re.findall(query_pattern,x) 
[('query1', 'value1'), ('query2', 'value2')] 
+0

可能值得詳細說明爲什麼正則表達式是這個釘子的錯誤錘子。 – 2012-04-04 11:07:04

+0

好吧我想我已經非常簡短地解釋了它。如果你想要更好地解釋它:D – jamylak 2012-04-04 11:09:34

+0

謝謝jamylak。你能告訴我怎樣才能把它分開一般。例如。如果查詢包含「name = asd&name1 = qwerty」,爲此上述模式不起作用。所以,而不是使用名稱wat v可以在查詢模式中使用。因爲我是新的Python正則表達式,我問這個:) – Myjab 2012-04-09 09:44:50

8

不要使用正則表達式!使用urlparse

>>> import urlparse 
>>> urlparse.parse_qs(urlparse.urlparse(url).query) 
{'query2': ['value2'], 'query1': ['value1']} 
+1

並在一行'urlparse.parse_qs(urlparse.urlparse(「http://www.example.com:8080/abcd/dir/file1.html?query1=value1&query2=value2」).query)' – Dikei 2012-04-04 10:49:34

+2

或'[對url.prse(url).query.split(「&」)]中的pair.split(「=」)' – Kimvais 2012-04-04 10:50:11