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

如何在多层文件夹选择场景中匹配1.0.0格式的版本文件夹名称?

如何匹配类似1.0.0格式的版本文件夹名称?

Hey,这个需求其实挺常见的——要识别符合x.y.z格式的版本文件夹,核心就是用正则表达式来做精准匹配。我给你一步步拆解实现方案,包括规则定义、正则写法,还有几种常用语言的代码示例:

第一步:明确匹配规则

我们要匹配的是主版本号.次版本号.修订号的格式,每个部分都是非负整数,比如1.0.0、2.13.45、0.1.0都属于这个范畴。如果你的场景还需要支持预发布版本(比如1.0.0-beta、2.3.1-alpha.2),也可以扩展规则。

第二步:编写正则表达式

正则是实现这种字符串匹配的最优方案,下面给你两种常用的写法:

基础版(仅匹配x.y.z格式)

这个正则可以精准匹配纯数字三段式的版本号:

^\d+\.\d+\.\d+$

各部分解释:

  • ^:匹配字符串的开头,确保我们检查的是整个文件夹名称,不是名称中间的子串
  • \d+:匹配1个或多个数字(对应主/次/修订号)
  • \.:匹配点号(需要转义,因为.在正则里是通配符)
  • $:匹配字符串的结尾,避免匹配到像v1.0.0或1.0.0_temp这类不符合要求的名称

扩展版(支持预发布版本)

如果需要支持语义化版本里的预发布标签(比如1.0.0-beta、2.1.0-rc.1),可以用这个扩展正则:

^\d+\.\d+\.\d+(-[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?$

额外部分解释:

  • (-[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?:可选的预发布标签,允许以-开头,后面跟着字母、数字、连字符,还可以有多个用.分隔的子标签

第三步:在代码中实现匹配

下面是两种常用编程语言的实现示例,你可以根据自己的技术栈调整:

Python示例

假设你需要遍历多层文件夹,筛选出符合格式的版本文件夹:

import re
import os

def is_version_folder(folder_name):
    # 这里可以替换成扩展版正则
    version_pattern = r'^\d+\.\d+\.\d+$'
    # 使用fullmatch确保整个字符串完全匹配正则
    return re.fullmatch(version_pattern, folder_name) is not None

# 遍历指定根目录下的所有文件夹(包括子目录)
def scan_version_folders(root_dir):
    for root, dirs, files in os.walk(root_dir):
        for folder in dirs:
            if is_version_folder(folder):
                folder_path = os.path.join(root, folder)
                print(f"找到目标版本文件夹:{folder_path}")
                # 在这里执行你的后续操作,比如读取文件、处理数据等

# 调用示例
scan_version_folders("/path/to/your/target/directory")

JavaScript示例(Node.js/Electron场景)

如果是在Node.js环境下处理文件夹遍历:

const fs = require('fs');
const path = require('path');

function isVersionFolder(folderName) {
    // 替换成扩展版正则即可支持预发布版本
    const versionRegex = /^\d+\.\d+\.\d+$/;
    return versionRegex.test(folderName);
}

// 递归遍历文件夹
function scanVersionFolders(rootDir) {
    const items = fs.readdirSync(rootDir);
    items.forEach(item => {
        const itemPath = path.join(rootDir, item);
        const stats = fs.statSync(itemPath);
        if (stats.isDirectory()) {
            if (isVersionFolder(item)) {
                console.log(`找到目标版本文件夹:${itemPath}`);
                // 执行后续操作
            }
            // 递归遍历子文件夹
            scanVersionFolders(itemPath);
        }
    });
}

// 调用示例
scanVersionFolders("/path/to/your/target/directory");

一些注意事项

  • 如果你不允许版本号出现前导零(比如不想匹配001.002.003),可以把正则里的\d+改成[1-9]\d*,比如^[1-9]\d*\.[1-9]\d*\.[1-9]\d*$,不过通常版本号的前导零是被允许的
  • 一定要用fullmatch(Python)或者确保正则包含^和$(JS),否则会误匹配到名称中包含版本号的文件夹(比如project_1.0.0)
  • 如果需要严格遵循语义化版本2.0.0规范,可以参考更全面的正则,但大部分场景下基础版或扩展版就足够了

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:32:52