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

如何在循环使用re.search()时保留多字符串的重复匹配结果?

问题说明

我需要在多个字符串中提取「数字+小写字母」的匹配项(比如2inch),但现有代码只返回最后一个匹配结果,无法得到所有符合要求的项。我的需求是从列表['1_abc-2inch-scatter', '1_abc-2inch-uniform', '2_abc-3inch-scatter', '2_abc-3inch-uniform']中提取出['2inch', '2inch', '3inch', '3inch']。

错误代码

import re
names = ['1_abc-2inch-scatter', '1_abc-2inch-uniform', '2_abc-3inch-scatter', '2_abc-3inch-uniform']
sizes = []
for name in names:
    sizes = re.search('\d[A-Za-z]+', name).group()
    print(sizes)

问题原因

循环里每次用sizes = ...直接覆盖了列表变量,把它变成了单个字符串,最后自然只剩最后一次循环的匹配结果。另外原正则\d[A-Za-z]+会匹配大小写字母,和需求里的小写字母匹配范围不符。

修复后的代码

import re
names = ['1_abc-2inch-scatter', '1_abc-2inch-uniform', '2_abc-3inch-scatter', '2_abc-3inch-uniform']
sizes = []
for name in names:
    # 精准匹配数字+小写字母的模式,同时判断匹配是否存在
    match = re.search(r'\d[a-z]+', name)
    if match:
        sizes.append(match.group())
print(sizes)

输出结果

['2inch', '2inch', '3inch', '3inch']

补充说明

  • 使用append()方法向列表中添加元素,避免直接赋值覆盖原有列表
  • 正则调整为r'\d[a-z]+',精准匹配数字后跟小写字母的目标模式
  • 增加if match:判断,防止字符串中无匹配项时抛出AttributeError

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 16:33:17