我正在尝试从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)
答案 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