2012-04-04 4 views
2

URL에서 표시 할 쿼리 이름과 값을 가져 오려고합니다. 예를 들어. url='http://host:port_num/file/path/file1.html?query1=value1&query2=value2' 이 쿼리 이름과 해당 값을 구문 분석하고이를 인쇄합니다.python에서 regex로 URL을 구문 분석합니다.

+3

귀하가 시도한 것을 보여주십시오. – claesv

답변

2

가 나는 urlparse를 사용하는 regex 더 나은를 사용하지 않는 것이 좋습니다 그러나 여기 내 regex 동의합니다. urlparse과 같은 클래스는 모든 URL을 효율적으로 처리하기 위해 특별히 개발되었으며 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

정규식이이 못에 대한 잘못된 망치 인 이유에 대해 자세히 설명해주는 것이 좋습니다. –

+0

좋아, 내가 아주 간단히 설명했다고 생각해. 원하는 경우 더 자세히 설명해주십시오. D – jamylak

+0

jamylak. 감사합니다. 당신이 전화를 plase 수있는 방법 v 일반적으로 분할 할 수 있습니다. 예를 들면. 쿼리에 "name = asd & name1 = qwerty"가 포함되어 있으면 위의 패턴은 작동하지 않습니다. 그래서 대신에 와트 v를 쿼리 패턴으로 사용할 수 있습니다. 이후 파이썬 정규식에 나는이 질문을 해요 : – Myjab

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

+2

또는'[ urlparse (url) .query.split ("&")] 쌍의 pair.split ("=") " – Kimvais

관련 문제