2011-02-16 3 views
1

두 마커 사이 postition을 찾기 위해 파이썬에서 정규 표현식을 사용하여정규식 문자열

https://www.site.gov.uk//search/cgi-bin/contract_search/contract_search.cgi?rm=show_detail&id=4035219;num=1;session_id=1445045;start=0;recs=20;subscription=1;value=0

show_detail& 

;session_id=1445045 

사이에 아무것도 찾을 필요가있다.

나는 lookbehind/ahead를 사용할 필요가 있지만 작동하도록 만들 수는 없다는 것을 알고 있습니다!

도와주세요!

감사합니다 :)

답변

4
>>> s= "https://www.site.gov.uk//search/cgi-bin/contract_search/contract_search.cgi?rm=show_detail&id=4035219;num=1;session_id=1445045;start=0;recs=20;subscription=1;value=0" 
>>> s.split(";session_id=1445045")[0].split("show_detail&")[-1] 
'id=4035219;num=1' 
>>> 
0
regex = re.compile(r"(?<=show_detail&amp;).*?(?=;session_id=1445045)" 

작동합니다. lookaround assertions에 대한 자세한 내용은 여기를 참조하십시오.

5

정규식을 사용해야하는 이유는 무엇입니까?

>>>> url = 'https://ww.site.gov.....' 
>>> start = url.index('show_detail&amp;') + len('show_detail&amp;') 
>>> end = url.index(';session_id=') 
>>> url[start:end] 
'id=4035219;num=1' 
2

마커 사이에 욕심이 적은 일치 (. *?)를 사용할 수 있습니다.

>>> import re 
>>> url = "https://www.site.gov.uk//search/cgi-bin/contract_search/contract_search.cgi?rm=show_detail&amp;id=4035219;num=1;session_id=1445045;start=0;recs=20;subscription=1;value=0" 
>>> m = re.search("show_detail&amp;(.*?);session_id=1445045", url) 
>>> m.group(1) 
'id=4035219;num=1' 
0
import re 


url = "https://www.site.gov.uk//search/cgi-bin/contract_search/contract_search.cgi?rm=show_detail&amp;id=4035219;num=1;session_id=1445045;start=0;recs=20;subscription=1;value=0" 
pattern = "([^>].+)(show_detail&amp;)([^>].+)(session_id=1445045)([^>].+)" 
reg = re.compile(r''''''+pattern+'''''',flags = re.S) 
match =reg.search(url) 

print match.group(3) 

이 내가

생각 일 것이다
관련 문제