2012-04-04 24 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