Scrapy:如何获取两个正则表达式之间的所有字符串

时间:2018-12-05 01:44:49

标签: python regex scrapy

我正在尝试从this website抓取内容。 如下所示,我列出了包含正则表达式“ \ d + \ s(\ w {3})”的所有段落。

<h1>Information#users</h1>
<table>
  <tr>
    <th>Username</th>
  </tr>
  <% @users.each do |user| %
    <tr>
      <td><%= user.name %></td>
    <tr>
  <% end %>
</table>  

我希望正则表达式从每个段落中获取“ \ d + \ s(\ w {3})”和“ \ d {2} 00”之间的所有文本,但不包括与regext匹配的文本。

下面的作品,但我想要介于两者之间的字符串。

events = response.xpath('//p[re:match(text(), "\d+\s\(\w{3}\)")]').extract()

我在下面尝试过但没有运气,但出现错误“ sre_constants.error:向后看需要固定宽度模式”:

for ev in events:
     event_detail = re.search(r'\d+\s\(\w{3}\).*?\d{2}00', ev)

如何使用lool-behind和look-ahead编写正确的正则表达式?

[已解决] 我摆脱了正则表达式后面的“ +”。下面的作品很完美。

for ev in events: event_detail = re.search('(?<=(\d+\s\(\w{3}\))(.*?)(\d{2}00)', ev) print(event_detail)

1 个答案:

答案 0 :(得分:0)

import re
import requests
from bs4 import BeautifulSoup

url = 'http://www.alfie.tokyo/schedule/201812.html'
r = requests.get(url)
soup = BeautifulSoup(r.content, 'html.parser')

re.findall('\d+\s\w{3}.*\d{2}:00', soup.prettify())

输出:

['30 1st. 20:00',
 '00 演奏1st. 19:30 2nd. 21:00',
 '30 1st. 20:00',
 '00 演奏1st.19:30 2nd. 21:00']

注意:我假设您的意思是\ d {2}:00而不是\ d {2} 00