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

Python正则提取指定前缀后的数字集合问题求助

解决Python正则提取“serial 7's”前缀后的数字集合问题

我来帮你搞定这个正则提取的需求!你之前尝试的代码没得到预期结果,主要是因为匹配的分隔符和模式逻辑不对——原字符串里的数字是用**连字符-**分隔的,而你写的正则在匹配逗号加空格(\d+, ),自然匹配不到目标内容。

下面给你两种可靠的解决方案:

方法1:先捕获完整数字序列再拆分(推荐)

这种方法先精准定位到“serial 7's ”后面的整个数字串,再用连字符拆分出单个数字,能最大程度避免误匹配其他无关数字:

import re

string = "serial 7's 93-86-79-72-65 very slow, recall 3/3 "
# 匹配serial 7's后面的所有数字+连字符组合
match_result = re.search(r'(?<=serial 7\'s )[\d-]+', string)
if match_result:
    # 用连字符拆分得到单个数字列表
    target_nums = match_result.group().split('-')
    print(target_nums)  # 输出:['93', '86', '79', '72', '65']

方法2:用正则直接提取目标数字

如果想一步到位用findall提取,可以结合正向断言确保数字属于“serial 7's”后的序列:

import re

string = "serial 7's 93-86-79-72-65 very slow, recall 3/3 "
# 匹配两种情况:1. serial 7's后面的第一个数字;2. 连字符后面的数字
target_nums = re.findall(r'(?<=serial 7\'s )\d+|(?<=-)\d+', string)
print(target_nums)  # 输出:['93', '86', '79', '72', '65']

为什么你的原代码不行?

  • 你写的(\d+, )是匹配数字+逗号+空格,但原字符串里的分隔符是连字符-,完全不匹配;
  • 即使改成(\d+- )+,findall也只会返回分组里的内容(也就是最后一个匹配的数字-),无法得到所有数字。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 11:22:39