2011-02-16 64 views
1

,我需要在Python中使用正則表達式查找正則表達式來找到兩個標記之間postition字符串

show_detail& 

;session_id=1445045 

之間的任何東西在

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

我知道我需要使用lookbehind /提前但我似乎無法使它工作!

請幫忙!

謝謝:)

回答

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) 

這樣的工作,我認爲

相關問題