首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用powershell解析包名和版本号

使用powershell解析包名和版本号
EN

Stack Overflow用户
提问于 2020-04-06 04:24:03
回答 1查看 237关注 0票数 0

我有字符串,必须将名称和版本号解析为单独的字段。版本号也可以包括字母表。

示例字符串:

代码语言:javascript
复制
AntivirusOwner10.5.6.R01.Vr561
Antivirus2010Owner10.5.6.R01.Vr561
Antivirus_abc Movbsd 2008 abc r6 10.20.161.17
Antivirus_abc Movbsd .abc 4.5.6.7
Antivirus_abc Movbsd .mnc 4

预期离职:

AntivirusOwner 10.5.6.R01.Vr 561 Antivirus2010Owner 10.5.6.6.R01.Vr 561 Antivirus_abc Movbsd 2008 abc r6 10.20.161.1 Antivirus_abc Movbsd .abc 4.5.6.7 Antivirus_abc Movbsd .mnc 4

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-06 08:48:57

根据您的示例字符串,我想说,我们假设包名在有一个数字后面跟着一个.之前就结束了。在这个示例中,这个正则表达式如下所示:

代码语言:javascript
复制
$packageDescriptions = "AntivirusOwner10.5.6.R01.Vr561", "Antivirus2010Owner10.5.6.R01.Vr561", "Antivirus_IIS .Net10.12.14.16", "Antivirus_abc Movbsd 2008 abc r6 10.20.161.17", "Antivirus_abc Movbsd .abc 4.5.6.7", "Antivirus_abc Movbsd .mnc 4"
foreach ($packageDescription in $packageDescriptions) {
    if ($packageDescription -imatch "^(.*?)(\d+\.[\w\.]*|\d+)$") {
        Select-Object @{n='PackageName'; e={$Matches[1]}}, @{n='PackageVersion'; e={$Matches[2]}} -InputObject ''
    } else {
        Write-Warning "'$packageDescription' is not covered by this regex!"
    }
}

输出:

PackageName PackageVersion.20.161.17 Antivirus_abc Movbsd .abc 4.5.6.7 Antivirus_abc Movbsd .mnc 4

正则表达式"^(.*?)(\d+\.[\w\.]*|\d+)$"的解释

它有两组由()封装。首先是名字。它在所有方面都匹配,但以一种不贪婪的方式(请参阅添加的?),这样组2将优先。第2组(版本)表示,它必须以至少一个数字开始,后面跟着一个点,然后是字母、数字字符和点,或者只是一些纯数字,以捕捉版本只包含4 (没有点)的情况。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61052936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档