如何提取含重复Model的文件路径中的Year(支持2015/2k15格式)?
我来帮你搞定这个正则匹配的问题!你遇到的情况是因为原来的正则太宽泛了,只要是Model/后面到下一个/之间的内容都会被匹配,所以第二种路径里的Model-Year就被误抓了。我们可以针对Year的特定格式来优化正则,精准提取目标字段。
解决方案1:基于Year格式的精准匹配
因为Year只有两种固定形式:20xx(四位数字,前两位为20)或者2kxx(以2k开头,后跟两位数字),我们可以直接把这两种格式作为匹配核心:
(?<=Model\/)(?:20\d{2}|2k\d{2})(?=\/)
拆解一下逻辑:
(?<=Model\/):正向预查,确保匹配内容的前缀是Model/(?:20\d{2}|2k\d{2}):非捕获组,专门匹配两种Year格式:20\d{2}:匹配2015、2024这类四位数字年份2k\d{2}:匹配2k15、2k20这类缩写年份
(?=\/):正向预查,确保匹配内容的后缀是/
这个正则在两种路径下都能精准提取Year:
- 对
/Make/Honda/2015/car.jpg→ 提取到2015 - 对
/Make/Tesla/Model3-2k18/photo.jpg→ 提取到2k18
解决方案2:从路径末尾反向匹配(备选方案)
如果担心Model名称里可能包含类似Year的字符(概率极低),可以换个思路:Year一定在图片文件名的前一级目录,所以我们可以从路径末尾往前匹配:
\/(20\d{2}|2k\d{2})\/[^\/]+$
使用时通过捕获组(第一个分组)获取Year内容:
- 对
/Make/Ford/Focus-2k16/shot.jpg→ 捕获组1得到2k16 - 对
/Make/BMW/2023/drive.jpg→ 捕获组1得到2023
这个方法不依赖Model的位置,只要Year位于图片文件的上一级目录就有效。
内容的提问来源于stack exchange,提问作者Simon
相关产品推荐
相关产品推荐

