我在以下代码中遇到了正则表达式的问题:
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
答案 0 :(得分:2)
您需要转义括号,因为它们具有特殊含义:
<a href="javascript:__doPostBack\('(.*?)','(.*?)'\)">
HERE^ HERE^
请注意,理想情况下,您不应该使用正则表达式解析HTML(即使您的模式非常具体,我也不认为这是that bad)。相反,使用BeautifulSoup
解析HTML,找到a
元素,获取href
属性值,然后使用正则表达式提取所需的子字符串。