与此url匹配的正则表达式是什么?

2024-10-04 11:36:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在运行一个很差劲的项目,我想从响应中提取文本:

>>> response.xpath('/html/body/table[2]/tr/td/table/tr[2]').extract()
[u'<tr class="over"onclick="HM.set(\'bWFya2V0PT1nZW5lcmFsfHxzdD09MzB8fHN0cz09eyIxMCI6IlJlZ2lvbiIsIjIwIjoiTWlkZGxlIEVhc3QiLCIzMCI6IjRSVU5ORVIgNjcxMzYwIn18fGNhdGFsb2c9PTY3MTM2MHx8cmVjPT1CMw%3D%3D\');">\n<td>671360</td>\n<td>4RUNNER</td>\n<td>11/1995-11/2002</td>\n<td>KZN185,RZN18#,VZN18#</td>\n</tr>']

我需要提取:

bWFya2V0PT1nZW5lcmFsfHxzdD09MzB8fHN0cz09eyIxMCI6IlJlZ2lvbiIsIjIwIjoiTWlkZGxlIEVhc3QiLCIzMCI6IjRSVU5ORVIgNjcxMzYwIn18fGNhdGFsb2c9PTY3MTM2MHx8cmVjPT1CMw%3D%3D

我试着用:response.xpath('/html/body/table[2]/tr/td/table/tr[2]').re('[^HM.+D$]*') ,但结果是:

[u'<tr class="over" onclick="', u'', u'', u'', u"set('bWFya2V0PT1nZW5lcmFsf", u'', u'xzd', u'', u'09', u'', u'zB8f', u'', u'N0cz09eyIx', u'', u'CI6IlJlZ2lvbiIsIjIwIjoiTWlkZGxlIEVhc3QiLCIz', u'', u'CI6IjRSVU5ORVIgNjcx', u'', u'zYwIn18fGNhdGFsb2c9PTY3', u'', u'T', u'', u'2', u'', u'', u'x8cmVjPT1C', u'', u'w%3', u'', u'%3', u'', u'\');">\n                                    <td>671360</td>\n                                    <td>4RUNNER</td>\n                                    <td>11/1995-11/2002</td>\n                                    <td>KZN185,RZN18#,VZN18#</td>\n                               </tr>', u'']

Tags: responsehtmltablebodyxpathtrclassover
1条回答
网友
1楼 · 发布于 2024-10-04 11:36:10

可以使用以下表达式:

(?<=HM\.set\(')[^']+

所以在你的情况下,它会转化为:

response.xpath('/html/body/table[2]/tr/td/table/tr[2]').re(r"(?<=HM\.set\(')[^']+")

说明:

  • (?<=HM\.set\(')与子字符串HM.set('匹配的正向查找。你知道吗
  • [^']+求反字符类,以匹配所有非'字符一次或多次。你知道吗

但是,仅使用捕获组进行此操作会更有效。你知道吗

例如:

HM\.set\('([^']+)'

可能是:

response.xpath('/html/body/table[2]/tr/td/table/tr[2]').re(r"HM\.set\('([^']+)'")

表达式[^HM.+D$]*不起作用,因为[^]是一个取反字符类,这意味着除[HM.+D$]之外的所有字符都将匹配(这不是您想要的)。你知道吗

或者,您可以始终检索onclick属性,然后从中解析值:

response.xpath('/html/body/table[2]/tr/td/table/tr[2]/@onclick').re(r"HM\.set\('([^']+)'")

相关问题 更多 >