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

REGEX正则表达式如何递归捕获分组,提取全部匹配的文件名?

正则匹配多文件名调整方案

问题原因

原有正则使用贪婪匹配规则,false.+"name":")中的.+会尽可能匹配最长的符合规则的字符串,会从第一个false位置一直向后匹配到最后一个文件名的前缀位置,因此最终只能捕获到最后一个符合后缀要求的文件名。

调整后的正则方案

正则表达式

如果需要限定仅匹配dir为false的条目,使用:
"dir":"false",[^}]*?"name":"([^"]+\.(?:jpg|jpeg|png))"
如果不需要限定dir属性,仅提取所有图片文件名,使用:
"name":"([^"]+\.(?:jpg|jpeg|png))"

关键修改点

  • 把贪婪匹配的.+替换为非贪婪的[^}]*?,匹配范围被限制在单个JSON对象内部,不会跨对象匹配
  • 使用[^"]+匹配文件名,避免匹配到文件名外的其他内容
  • 后缀规则使用非捕获组(?:jpg|jpeg|png),避免额外捕获后缀内容

全局匹配要求

除了正则本身调整外,需要开启正则的全局匹配模式才能返回所有匹配结果:

  • JavaScript/Java等语言:正则末尾加g修饰符
  • Python:使用re.findall()或re.finditer()方法
  • PHP:使用preg_match_all()函数

代码示例(Python)

import re

# 原始数据
raw_data = '''{"dir":"false", "bytes":158481, "parent_folder":"/Annie/FROM OLD DVDS", "name":"1.jpg"}, {"dir":"false", "bytes":382661, "parent_folder":"/Annie/FROM OLD DVDS", "name":"2.jpg"}, {"dir":"false", "bytes":1455205, "parent_folder":"/Annie/FROM OLD DVDS", "name":"3.jpg"}'''

# 匹配规则
pattern = r'"dir":"false",[^}]*?"name":"([^"]+\.(?:jpg|jpeg|png))"'
# 全局匹配所有结果
file_names = re.findall(pattern, raw_data)
# 按要求格式输出
print(', '.join(file_names))

运行后输出:1.jpg, 2.jpg, 3.jpg

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:57:03