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

PowerShell中如何按正则表达式的命名捕获组排序

按正则捕获组的版本号排序解决方案

没问题,要实现按正则里捕获的version组排序其实很简单,而且咱们得用版本号专用的排序逻辑,避免字符串排序带来的问题(比如字符串排序时1.10.0.0会排在1.2.0.0前面,这显然不符合版本号的排序预期)。

简洁版实现

直接在Sort-Object里用脚本块提取并转换版本号即可,因为Where-Object匹配成功后,自动变量$matches会保留当前对象的捕获组内容:

$regexpo = "^Amma\s(?'version'(\d+\.){3}\d)\.zip$"
$Library = $wholeContent | 
    Where-Object { $_.Name -match $regexpo } | 
    Sort-Object { [version]$matches['version'] } -Descending

更健壮的版本(处理异常情况)

如果担心有部分文件名匹配正则但提取版本失败的情况,可以加个容错判断,把异常项放到末尾:

$Library = $wholeContent | 
    Where-Object { $_.Name -match $regexpo } | 
    Sort-Object { 
        if ($matches['version']) {
            [version]$matches['version']
        } else {
            [version]'0.0.0.0' # 匹配失败的项默认设为最低版本
        }
    } -Descending

带临时属性的清晰版(可选)

如果想更直观地看到版本号,也可以先给对象添加一个临时的版本属性,排序后再去掉:

$Library = $wholeContent | 
    Where-Object { $_.Name -match $regexpo } | 
    # 添加ParsedVersion属性,转换为version类型
    Select-Object *, @{Name='ParsedVersion'; Expression={ [version]$matches['version'] }} |
    Sort-Object ParsedVersion -Descending |
    # 移除临时属性,回到原来的对象结构
    Select-Object * -ExcludeProperty ParsedVersion

原理说明

PowerShell的[version]类型(对应.NET的Version类)会自动识别x.x.x.x格式的版本号,并按照主版本→次版本→构建号→修订号的顺序进行正确排序,完美解决字符串排序的缺陷。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 11:44:06