2016-08-31 34 views
0

我有下面的代碼正則表達式的麻煩:(。*?)Python的重 - 逃避巧合括號在正則表達式模式

import mechanize 
import re 

br = mechanize.Browser() 
br.set_handle_robots(False) 
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')] 
response = br.open("http://www.gfsc.gg/The-Commission/Pages/Regulated-Entities.aspx?auto_click=1") 

html = response.read() 
br.select_form(nr=0) 
#print br.form 
br.set_all_readonly(False) 
next = re.search(r"""<a href="javascript:__doPostBack('(.*?)','(.*?)')">""",html) 

if next: 
    print 'group(1):', next.group(1) 
    print 'group(2):', next.group(2) 

如果兩個實例周圍的單引號是從正則表達式刪除,這些是結果:

group(1): ('ctl00$ctl20$g_af5ce308_e786_4734_ad4c_9829087cffbd$ctl00$gvWebLicensee','Page$2') 
group(2): ('ctl00$ctl20$g_af5ce308_e786_4734_ad4c_9829087cffbd$ctl00$gvWebLicensee' 

這些結果不太正確。括號和單引號需要拆除(不是我的問題),我想組(1),組(2)看起來像這樣:

group(1): ctl00$ctl20$g_af5ce308_e786_4734_ad4c_9829087cffbd$ctl00$gvWebLicensee 
group(2): Page$2 

回答

2

您需要逃避括號因爲他們有特殊的意義:

<a href="javascript:__doPostBack\('(.*?)','(.*?)'\)"> 
          HERE^   HERE^ 

需要注意的是,理想情況下,你不應該用解析HTML正則表達式(即使你的模式是非常具體的,我不認爲這是that bad)。相反,使用例如BeautifulSoup解析HTML,找到a元素,獲取href屬性值,然後使用正則表達式提取所需的子字符串。

+0

@ chris85 phew,是的,一種壞的錯字:)謝謝。 – alecxe

+0

謝謝,我現在明白了。我的目標羣體周圍的括號創造了一個我沒有發現的羣體。 – Astrophe