You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python正则表达式无法捕获全部时长数据(Python3.6+Scrapy)

解决时长匹配的正则问题

你的问题核心在于网页里Length:后的空格数不一致——短时长对应两个空格,长时长对应一个空格,导致原正则无法兼容两种场景。我来帮你调整正则表达式,同时搞定两种格式的时长捕获。

问题拆解

  • 最初的正则(?<=Length:\s\s)[:\d]+硬绑定了两个空格,自然抓不到仅带一个空格的长时长;
  • 修改后的(?<=Length:)[:\d\s]+会把Length:后面的空格也纳入匹配范围,所以优先返回空格而非目标时长。

解决方案

我们可以让正则兼容Length:后1到2个空格的情况,同时精准捕获纯时长内容(数字+冒号的组合)。推荐两种写法:

写法一:精准匹配1-2个空格

适合确定只有1或2个空格的场景:

length_list = re.findall(r'(?<=Length:\s{1,2})[\d:]+', response.text)

写法二:鲁棒匹配任意空白字符

如果网页里可能出现制表符、多个空格等情况,用这个更灵活:

length_list = re.findall(r'(?<=Length:\s+)[:\d]+', response.text)

正则解释

  • (?<=Length:\s{1,2}):正向后行断言,定位到Length:后跟着1-2个空格的位置;
  • (?<=Length:\s+):更宽松的断言,匹配Length:后至少一个任意空白字符(空格、制表符都算);
  • [\d:]+:匹配连续的数字和冒号,完美覆盖mm:ss和hh:mm:ss两种时长格式。

完整代码示例

import re

# 模拟包含两种时长格式的网页文本
response_text = """
<div>Length:  51:00</div>
<div>Length: 01:08:47</div>
"""

data = {}
length_list = re.findall(r'(?<=Length:\s+)[:\d]+', response_text)
if length_list:
    data['Length'] = length_list[0]
else:
    data['Length'] = '00:00'

print(data['Length'])  # 输出第一个匹配到的时长,如需全部可遍历列表

内容的提问来源于stack exchange,提问作者Angel Chen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:29:39