regex - Python重新转义正则表达式模式中的巧合括号

标签 regex python-2.7 mechanize dopostback

我在使用以下代码中的正则表达式时遇到问题:

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'

这些结果并不完全正确。括号和单引号需要删除(不是我的问题),我希望 group(1) 和 group(2) 看起来像这样:
group(1): ctl00$ctl20$g_af5ce308_e786_4734_ad4c_9829087cffbd$ctl00$gvWebLicensee
group(2): Page$2

最佳答案

您需要转义括号,因为它们具有特殊含义:

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

请注意,理想情况下,您不应使用正则表达式解析 HTML(即使您的模式非常具体,我认为这不是 that bad )。相反,用 BeautifulSoup 解析 HTML , 找到 a元素,得到 href属性值,然后使用正则表达式提取所需的子字符串。

关于regex - Python重新转义正则表达式模式中的巧合括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39254333/

相关文章:

ruby - 在 Mechanize 中查找没有名称的字段

regex - 在 Prometheus 中使用正则表达式 relabel_configs source_labels

Python:使用 Pool、apply_async 和 join

Javascript 正则表达式匹配由空格分隔但不包含点的字符串

python-2.7 - Pandas 中的长到宽 DataFrame 在新列中具有枢轴列名称

python - Matplotlib pyplot 2d 散布无轴,添加共享轴标签

python - 提交带有 Mechanize HTTP 错误 500 的表单

ruby - 为什么 Mechanize 在尝试设置密码时返回 "undefined method ' 值 =' for nil:NilClass"?

javascript - 来自对象的正则表达式

python正则表达式拆分第一个字符