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

Python正则re.findall仅匹配最后结果,如何获取全部目标数字?

解决Python正则提取多个HTML课程编号的问题

原正则只返回最后一个结果的核心原因是:正则前后的.*?和.*会迫使引擎匹配整个字符串,最终只会定位到最后一个符合<a href='.*'>([0-9]+)</a>,的位置,因此仅捕获到最后一组数字。

要提取全部目标编号,只需聚焦每个<a>标签内的数字部分,调整正则即可:

方案1:直接提取标签包裹的数字

简化正则,精准匹配每个<a>标签中>与</a>之间的数字:

import re

string = "<a href='https://academia/course/3743'>3743</a>, <a href='https://academia/course/3963'>3963</a>,    <a href='https://academia/course/3850'>3850</a>,"
# 调整后的正则
pattern = r"<a href='.*?'>(\d+)</a>"
result = re.findall(pattern, string)
print(result)  # 输出: ['3743', '3963', '3850']

如果需要整数类型的结果,直接用列表推导式转换:[int(num) for num in result]

方案2:关联href路径中的数字(确保一致性)

如果需要保证提取的数字与href路径里course/后的编号一致,可使用更精准的正则,同时捕获两者(按需取其中一组即可):

pattern = r"<a href='.*?course/(\d+)'>(\d+)</a>"
result = re.findall(pattern, string)
# 输出: [('3743', '3743'), ('3963', '3963'), ('3850', '3850')]
# 取href中的编号:[pair[0] for pair in result]

关键注意点:

  • 移除正则前后的.*和,.*,避免匹配整个字符串
  • 用\d+替代[0-9]+,写法更简洁
  • href内的.*改为非贪婪匹配.*?,防止跨标签错误匹配

内容的提问来源于stack exchange,提问作者Sarthak Mahapatra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 21:13:17