2011-03-06 6 views

답변

8

regular expression을 사용할 수 있습니다 (예 :

).
import re 

s = "http://example.com/variable/controller/id32434242423423234?param1=321&param2=4324342" 

m = re.search(r'controller/id(\d+)\?',s) 
if m:  
    print "Found the id:", m.group(1) 

값이 문자열이 아닌 숫자로 필요하면 int(m.group(1))을 사용할 수 있습니다. 코드의 더 큰 목표에 따라 더 적절할 수있는 다른 방법이 많이 있지만 상황을 더 이상 말하기는 어렵습니다.

+0

부적처럼 잘 작동합니다. – Mladen

+1

th에서 꼭 필요한 것은 아니지만 ('\ f ')'와'list (r'\ f)의 차이점에주의하십시오.''[\ ​​f] ''와 같은 문제를 피하기 위해' ')'). – jfs

+0

@ J.F. Sebastian : 제안에 감사드립니다 - 나는 그 변화를 만들었습니다. (우수한 사용자 이름, BTW :)) –

2
>>> s 
'http://example.com/variable/controller/id32434242423423234?param1=321&param2=4324342' 
>>> s.split("id") 
['http://example.com/variable/controller/', '32434242423423234?param1=321&param2=4324342'] 
>>> s.split("id")[-1].split("?")[0] 
'32434242423423234' 
>>> 
3
>>> import urlparse 
>>> res=urlparse.urlparse("http://example.com/variable/controller/id32434242423423234?param1=321&param2=4324342") 
>>> res.path 
'/variable/controller/id32434242423423234' 
>>> import posixpath 
>>> posixpath.split(res.path) 
('/variable/controller', 'id32434242423423234') 
>>> directory,filename=posixpath.split(res.path) 
>>> filename[2:] 
'32434242423423234' 

urlparseposixpath를 사용하여이 경우에 너무 많이,하지만 난 그것을 할 수있는 깨끗한 방법입니다 생각할 수 있습니다.

+0

Windows에서'os.path.split()'이 예상대로 작동하지 않습니다. 대신'posixpath.split()'를 사용하십시오. – jfs

+0

흥미 롭습니다. Windows XP에서 Python 2.6.5를 사용하고 있습니다. 작동하지 않는 Windows 버전은 무엇입니까? –

+0

Windows에서'os.path.split()'은 구분 기호 r '\ /'를 사용하고 인수에서'splitdrive()'를 호출합니다. 원하지 않으면'posixpath.split()'을 사용하십시오. – jfs

0

Regex는 이동하는 방법이지만 간단한 것들은 string parser이라고 썼습니다. 어떤 식 으로든, 문자열 형식화 연산의 (완료되지 않은) 역 연산은 PEP 3101입니다. 이는 문자열을 지정하는 다른 방법을 배우지 않아도되므로 매우 편리합니다. 예를 들어

: 귀하의 경우를 들어

>>> Parser('The answer is {:d}')('The answer is 42') 
42 

, 당신은 출력

>>> url = 'http://example.com/variable/controller/id32434242423423234?param1=321&param2=4324342' 
>>> fmt = 'http://example.com/variable/controller/id{:d}?param1=321&param2=4324342' 
>>> Parser(fmt)(url) 
32434242423423234 

로 int를 원하는 경우 문자열을 원하는 경우 : 파서는 반대를하지

>>> 'The answer is {:d}'.format(42) 
The answer is 42 

:

>>> fmt = 'http://example.com/variable/controller/id{:s}?param1=321&param2=4324342' 
>>> Parser(fmt)(url) 
32434242423423234 

당신이 딕셔너리에서 더 많은 일을 캡처하려는 경우

>>> fmt = 'http://example.com/variable/controller/id{id:s}?param1={param1:s}&param2={param2:s}' 
>>> Parser(fmt)(url) 
{'id': '32434242423423234', 'param1': '321', 'param2': '4324342'} 

또는 튜플에서

:

당신이 딕셔너리에서 더 많은 일을 캡처하려는 경우

>>> fmt = 'http://example.com/variable/controller/id{:s}?param1={:s}&param2={:s}' 
>>> Parser(fmt)(url) 
('32434242423423234', '321', '4324342') 

가지 적어 시험해 주시면 호스트 here