2016-08-31 7 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

あなたは、彼らが持っているので括弧をエスケープする必要があります特別な意味:理想的に、あなたは正規表現でHTMLを解析してはならない、ということ

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

は注意(ご使用のパターンは非常に特異的で、私はこれがthat badだとは思わないにもかかわらず)。代わりに、例えばBeautifulSoupでHTMLを解析し、a要素を探し、hrefの属性値を取得し、正規表現で目的の部分文字列を抽出します。

+0

@ chris85 phew、はい、悪い誤植の種類:)ありがとう。 – alecxe

+0

ありがとう、私は今それを参照してください。私の意図したグループの周りのカッコは、私が見つけなかったグループを作り出していました。 – Astrophe

関連する問題