首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Powershell -应该只从文件名中获取一组数字。

Powershell -应该只从文件名中获取一组数字。
EN

Stack Overflow用户
提问于 2022-07-18 06:24:53
回答 2查看 68关注 0票数 1

我有一个脚本,它从路径位置读取文件名,然后他只获取这些数字,并对它们做一些事情。在我遇到这种情况之前,一切都很顺利。

举个例子:

对于文件名Patch_1348968.vip,它使用数字1348968。在文件名为Patch_1348968_v1.zip的情况下,它使用错误的数字13489681

我用这个来取数字。一般来说,它总是以patch_#####.vip开头,以7-8位数开头,所以我只想在任何符号(如_- )之前取数字。

代码语言:javascript
运行
复制
$PatchNumber = $file.Name -replace "[^0-9]" , ''
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-07-18 07:31:01

您可以使用

代码语言:javascript
运行
复制
$PatchNumber = $file.Name -replace '.*[-_](\d+).*', '$1'

regex演示

详细信息

  • .* -除换行符以外的任何字符尽可能多
  • [-_] -一个-_
  • (\d+) -第1组($1):一个或多个数字
  • .* -除换行符以外的任何字符尽可能多。
票数 1
EN

Stack Overflow用户

发布于 2022-07-18 06:59:15

我建议使用-match,这样您就不必考虑倒置:

代码语言:javascript
运行
复制
if( $file.Name -match '\d+' ) {
    $PatchNumber = $matches[0]
}

\d+匹配第一个连续的数字序列。自动变量$matches包含索引0处的完全匹配,如果-match操作符成功地将输入字符串与模式匹配。

如果希望更具体,可以使用更复杂的模式,并使用捕获组提取所需的子字符串。

代码语言:javascript
运行
复制
if( $file.Name -match '^Patch_(\d+)' ) {
    $PatchNumber = $matches[1]
}

在这里,锚点^确保匹配从输入字符串的开头开始,然后Patch_按字面顺序匹配(大小写不敏感),然后是一组连续的数字,这些数字被捕获()并可以使用$matches[1]提取。

您可以更详细地解释RegEx以及在regex101.com上实验它的能力。

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

https://stackoverflow.com/questions/73018063

复制
相关文章

相似问题

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